【问题标题】:NodeJS unsafe-perm not working on package.jsonNodeJS unsafe-perm 不适用于 package.json
【发布时间】:2015-04-30 02:23:14
【问题描述】:

我正在尝试在我的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 可以在我的包文件中添加这个属性。我想了解为什么它不起作用。

【问题讨论】:

    标签: javascript node.js npm package.json


    【解决方案1】:

    当您添加该属性时,您将其添加到您的脚本环境中,前缀为 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 的支持志愿者。

    【讨论】:

    • 这是否适用于 Node.js v10.15.13、npm 6.4.1、Windows 10 环境?
    【解决方案2】:

    不安全的烫发

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

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

    【讨论】:

    • 我已经读过了。我的问题是我需要将此属性设置为 true 作为 root 用户运行。这就是我的问题的重点
    • 这个属性可以在调用npm时在commandline上设置,即使是root:sudo npm install --unsafe-perm true PACKAGE_NAME
    猜你喜欢
    • 2018-08-11
    • 2022-07-07
    • 2018-05-24
    • 1970-01-01
    • 2020-08-13
    • 2012-03-24
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多