gpt4 book ai didi

json - `npm install` 运行时在主目录写入文件

转载 作者:搜寻专家 更新时间:2023-10-31 23:54:42 26 4
gpt4 key购买 nike

当安装一个foo模块时,作为开发者,我想编写~/.foo.json文件(其中~/是用户的主目录)。

为此我在 package.json 中做了:

{
...
"scripts": {
"preinstall": "./installation/preinstall.js"
},
...
}

/installation/preinstall.js(可执行文件)中,我有:

#!/usr/bin/env node

// Dependencies
var Fs = require("fs");

function getUserHome() {
return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
}

console.log("Creating configuration file ...")
Fs.writeFileSync(getUserHome() + "/" + ".foo.json", JSON.stringify(
require("./sample-config"), null, 4
));

当运行 sudo npm install ...@... -g 时,我得到以下输出:

ionicabizau@laptop:~$ sudo npm install ...@...-alpha1 -g                           
npm http GET https://registry.npmjs.org/...
npm http 304 https://registry.npmjs.org/...

> ...@...-alpha1 preinstall /usr/lib/node_modules/...
> ./installation/preinstall.js

Creating configuration file ...

fs.js:432
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: EACCES, permission denied '/home/ionicabizau/.foo.json'
at Object.fs.openSync (fs.js:432:18)
at Object.fs.writeFileSync (fs.js:971:15)
at Object.<anonymous> (/usr/lib/node_modules/.../installation/preinstall.js:11:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3

为什么 EACCESS 错误,即使我使用 sudo 运行它?

运行 Ubuntu 14.04,如果相关的话。

最佳答案

根据 documentation , 如果 npm 是用 root 权限调用的,那么它会将 uid 更改为 user 帐户或用户配置指定的 uid,默认为 nobody。设置 unsafe-perm 标志以使用 root 权限运行脚本。

所以,这就是问题所在。环境变量 HOMEUSERPROFILE 保持不变,但用户是 nobody

但是,--unsafe-perm 阻止了这种情况:

sudo npm install foo -g --unsafe-perm

关于json - `npm install` 运行时在主目录写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com