NodeJS unsafe perm不适用于package.json
NodeJS unsafe-perm not working on 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配置文档,在我的包文件中添加此属性是可以的。我想知道为什么它不起作用。
当您添加该属性时,您将使用前缀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.
不安全的perm
默认值:如果以root身份运行,则为false,否则为true类型:布尔设置为true可在运行包脚本时抑制UID/GID切换。如果显式设置为false,则作为非root用户安装将失败。
请参阅https://docs.npmjs.com/misc/config#unsafe-perm
相关文章:
- 如何将package.json数组传递给grunt.js
- 为什么react/redux前端项目在package.json中包含生产依赖项
- 试图在Windows上执行package.json中的脚本会引发JScript错误
- `npm install` killed for large package.json, no npm-debug.lo
- 将 package.json 用于客户端包,可以在浏览器中动态加载
- 在现有的package.json中安装新的依赖项
- NodeJS unsafe perm不适用于package.json
- 我删除了package.json和Gruntfile.js,现在Grunt不会加载依赖项
- NPM从package.json安装依赖项
- 如何将自定义脚本添加到运行javascript文件的package.json文件中
- 接收package.json的解析错误.验证为有效的json
- 使用HTTP从公共存储库获取package.json
- 同步读取package.json中的自定义字段
- package.json“最新”版本是否包含测试版
- Browserify - 在 package.json 中转换在符号链接模块中不起作用在 npm3 中
- 我怎样才能将 ESLint 推荐传递给 package.json
- 当包含 package.json 文件失败时使用 webpack
- angular 2 package.json文件的说明
- package.json中的手表触控笔
- 在package.json脚本中调用特定的NodeJS函数