10

我正在尝试npm install在我的package.json. 我知道这是反模式,但我需要以 root 身份运行一些脚本。

通过添加一个.npmrc包含unsafe-perm = true到我的根目录的文件可以正常工作。package.json但是通过在我的文件中添加配置属性不起作用:

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

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

4

2 回答 2

5

添加该属性时,会将其添加到脚本环境中,并带有前缀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吗?

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

于 2015-02-28T22:57:33.747 回答
2

不安全烫发

默认值:如果以 root 身份运行,则为 false,否则为 true 类型:Boolean 设置为 true 以在运行包脚本时抑制 UID/GID 切换。如果显式设置为 false,则以非 root 用户身份安装将失败

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

于 2015-02-27T13:50:24.587 回答