安装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,如果它是相关的。
答案 0 :(得分:2)
根据documentation,如果使用root权限调用npm,则会将uid更改为用户配置指定的user
帐户或uid,默认为{{1 }}。设置nobody
标志以运行具有root权限的脚本。
所以,这就是问题所在。环境变量unsafe-perm
或HOME
保持不变,但用户为USERPROFILE
。
但是,nobody
阻止了这一点:
--unsafe-perm