我尝试在npm install
处使用预安装脚本运行package.json
命令。我知道它的反模式,但我需要以root身份运行一些脚本。
通过向我的根目录添加包含.npmrc
的{{1}}文件,它可以正常工作。但它在我的unsafe-perm = true
文件中添加配置属性无效:
package.json
根据NPM config docs,可以在我的包文件中添加此属性。我想明白为什么它不起作用。
答案 0 :(得分:4)
添加该属性时,您将其添加到脚本环境中,前缀为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上的支持志愿者。
答案 1 :(得分:2)
不安全烫发
默认值:如果以root身份运行则为false,否则为true 类型:布尔值 设置为true以在运行程序包脚本时禁止UID / GID切换。如果明确设置为false,则以非root用户身份安装将失败。