【问题标题】:Write file in home directory when running `npm install`运行`npm install`时在主目录中写入文件
【发布时间】:2014-09-20 14:41:33
【问题描述】:

在安装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(如果相关)。

【问题讨论】:

    标签: json node.js ubuntu permissions npm


    【解决方案1】:

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

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

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

    sudo npm install foo -g --unsafe-perm
    

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 1970-01-01
      • 2020-03-08
      • 2021-02-12
      • 2016-02-19
      • 2017-03-26
      • 2016-05-03
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多