微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试使用我的package.json中的预安装脚本运行npm install命令.我知道它是反模式但我需要以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,可以在我的包文件添加属性.我想明白为什么它不起作用.

解决方法

添加属性时,您将使用前缀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支持志愿者.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐