NodeJS unsafe-perm无法在package.json上运行

时间:2015-02-27 11:24:02

标签: javascript node.js npm package.json

我尝试在npm install处使用预安装脚本运行package.json命令。我知道它的反模式,但我需要以root身份运行一些脚本。

通过向我的根目录添加包含.npmrc的{​​{1}}文件,它可以正常工作。但它在我的unsafe-perm = true文件中添加配置属性无效:

package.json

根据NPM config docs,可以在我的包文件中添加此属性。我想明白为什么它不起作用。

2 个答案:

答案 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用户身份安装将失败

请参阅https://docs.npmjs.com/misc/config#unsafe-perm