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

时间:2014-07-29 09:05:11

标签: json node.js ubuntu permissions npm

安装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,如果它是相关的。

1 个答案:

答案 0 :(得分:2)

根据documentation如果使用root权限调用npm,则会将uid更改为用户配置指定的user帐户或uid,默认为{{1 }}。设置nobody标志以运行具有root权限的脚本。

所以,这就是问题所在。环境变量unsafe-permHOME保持不变,但用户为USERPROFILE

但是,nobody阻止了这一点:

--unsafe-perm