NodeJS 不安全烫发无法在 package.json 上运行
NodeJS unsafe-perm not working on package.json
我正在尝试 运行 npm install
命令和 package.json
上的预安装脚本。我知道这是反模式,但我需要 运行 一些脚本作为 root。
通过将包含 unsafe-perm = true
的 .npmrc
文件添加到我的根目录,它工作正常。但是在我的 package.json
文件中添加配置 属性 是行不通的:
{
"name": "foo",
"version": "1.4.4",
"config": {
"unsafe-perm":true
},
"scripts" : {
"preinstall" : "npm install -g bower"
}
}
// It is not working
根据 NPM config docs 可以将此 属性 添加到我的包文件中。我想了解为什么它不起作用。
不安全烫发
默认值:如果 运行 作为 root,则为 false,否则为 true
类型:布尔
设置为 true 以在 运行 包脚本时抑制 UID/GID 切换。如果明确设置为 false,那么作为非 root 用户安装将失败。
当您添加 属性 时,您将其添加到您的脚本环境中,前缀为 npm_config_package
:
$ cat package.json
{
"config": { "unsafe-perm": true }
}
$ npm run env | grep perm
$ npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=true
$ sudo npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=
$
这是出于某种安全原因。 npm
注册表中的任意包允许您更改 npm
的配置设置(例如,如果它将前缀设置为 /etc
并安装名为passwd
)
然而,您仍然可以通过在脚本行中设置环境变量来绕过它(这不适用于 Windows):
$ cat package.json
{
"config": { "unsafe-perm": true },
"scripts": { "foo": "npm_config_unsafe_perm=true env" }
}
$ npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$ sudo npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$
虽然这可能是 npm
中的错误,因此我建议不要依赖此行为。您可以使用与 root
不同的用户吗?
来源:在 OSX 上用 npm@2.6.1
测试。我是 npm
问题跟踪器 https://github.com/npm/npm/issues.
的支持志愿者
我正在尝试 运行 npm install
命令和 package.json
上的预安装脚本。我知道这是反模式,但我需要 运行 一些脚本作为 root。
通过将包含 unsafe-perm = true
的 .npmrc
文件添加到我的根目录,它工作正常。但是在我的 package.json
文件中添加配置 属性 是行不通的:
{
"name": "foo",
"version": "1.4.4",
"config": {
"unsafe-perm":true
},
"scripts" : {
"preinstall" : "npm install -g bower"
}
}
// It is not working
根据 NPM config docs 可以将此 属性 添加到我的包文件中。我想了解为什么它不起作用。
不安全烫发
默认值:如果 运行 作为 root,则为 false,否则为 true 类型:布尔 设置为 true 以在 运行 包脚本时抑制 UID/GID 切换。如果明确设置为 false,那么作为非 root 用户安装将失败。
当您添加 属性 时,您将其添加到您的脚本环境中,前缀为 npm_config_package
:
$ cat package.json
{
"config": { "unsafe-perm": true }
}
$ npm run env | grep perm
$ npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=true
$ sudo npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=
$
这是出于某种安全原因。 npm
注册表中的任意包允许您更改 npm
的配置设置(例如,如果它将前缀设置为 /etc
并安装名为passwd
)
然而,您仍然可以通过在脚本行中设置环境变量来绕过它(这不适用于 Windows):
$ cat package.json
{
"config": { "unsafe-perm": true },
"scripts": { "foo": "npm_config_unsafe_perm=true env" }
}
$ npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$ sudo npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$
虽然这可能是 npm
中的错误,因此我建议不要依赖此行为。您可以使用与 root
不同的用户吗?
来源:在 OSX 上用 npm@2.6.1
测试。我是 npm
问题跟踪器 https://github.com/npm/npm/issues.