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的主要内容,如果未能解决你的问题,请参考以下文章