NodeJS unsafe perm不适用于package.json

NodeJS unsafe-perm not working on package.json

本文关键字:package json 适用于 不适用 unsafe perm NodeJS      更新时间:2023-09-26

我正试图在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