NodeJS unsafe-perm 不适用于 package.json

Posted

技术标签:

【中文标题】NodeJS unsafe-perm 不适用于 package.json【英文标题】:NodeJS unsafe-perm not working on 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 可以在我的包文件中添加这个属性。我想了解为什么它不起作用。

【问题讨论】:

【参考方案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

以上是关于NodeJS unsafe-perm 不适用于 package.json的主要内容,如果未能解决你的问题,请参考以下文章

护照身份验证不适用于 nodejs 和 mysql

Nodejs 加密模块不适用于打字稿

Nodejs异步功能不适用于每个功能[重复]

Socket.io + NodeJS 不适用于 Heroku

Tailwind CSS 不适用于 React App

NodeJs:dotenv不适用于嵌套路径