NodeJS不安全的perm不能在package.json上工作

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

通过向我的根目录添加一个包含unsafe-perm = true.npmrc文件,它工作正常。 但是它不能通过在我的package.json文件中添加一个configuration属性来工作:

  { "name": "foo", "version": "1.4.4", "config": { "unsafe-perm":true }, "scripts" : { "preinstall" : "npm install -g bower" } } // It is not working 

根据NPMconfiguration文档,可以在我的包文件中添加此属性。 我想了解为什么它不工作。

       

网上收集的解决方案 "NodeJS不安全的perm不能在package.json上工作"

添加该属性时,将使用前缀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= $ 

这是出于安全原因,有点。 如果npmregistry中的任意包允许你改变npm的configuration设置(例如,如果它将前缀设置为/etc并安装了一个名为passwd的文件)

但是,您仍然可以通过在脚本行中设置环境variables来解决该问题(这在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一个错误,所以我build议不要依赖这种行为。 你可以逃脱使用不同的用户比root

来源:在OSX上使用npm@2.6.1进行testing。 我是npm问题跟踪器的支持志愿者, https://github.com/npm/npm/issues

不安全烫发

如果以超级用户身份运行,则为true;否则为true Type:Boolean设置为true以禁止在运行程序包脚本时切换UID / GID。 如果显式设置为false, 则以非root用户身份进行安装将失败

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