192

我正在尝试在一个新的 Ubuntu 12.04 实例上设置我的节点环境,并且已经安装了 Node 0.8.14,但是当我尝试运行npm install. 所以当我尝试时npm install,它说我需要以 root 或管理员身份运行它:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

但是当尝试以 sudo 运行它时,它会显示以下内容:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

在我的 package.json 中,它包含以下脚本:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

其余的 devdependencies 是有效的,因为我一直在我自己的机器(Mac)上安装它。有人知道为什么会这样吗?

4

6 回答 6

273

文档说(也在这里):

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

您的选择是:

  1. npm install带着--unsafe-perm旗帜跑:

    [sudo] npm install --unsafe-perm
    
  2. unsafe-perm标志添加到您的package.json

    "config": {
        "unsafe-perm":true
    }
    
  3. 不要使用preinstall脚本安装全局模块,单独安装它们然后在npm install没有root权限的情况下运行常规:

    sudo npm install -g coffee-script node-gyp
    npm install
    

相关

于 2013-10-02T07:49:14.680 回答
81

唯一对我有用的是添加一个.npmrc文件,其中包含:

unsafe-perm = true

添加相同的配置package.json没有任何效果。

于 2018-01-09T14:10:32.983 回答
29

尝试在使用 root 用户运行 CentOs 的私有服务器中发布我的 nodejs 应用程序时,我遇到了同样的问题。我的 package.json 文件中的 "postinstall": "./node_modules/bower/bin/bower install" 引发了同样的错误,所以唯一对我有用的解决方案是同时使用这两个选项来避免错误:

1:使用 --allow-root 选项进行 bower install 命令

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2:对 npm install 命令使用 --unsafe-perm 选项

npm install --unsafe-perm
于 2015-04-20T22:01:35.513 回答
14

在这里,自从我第一次问这个问题以来,我已经了解了更多关于节点的知识。尽管 Dmitry 的回答非常有帮助,但最终为我做的是安装具有正确权限的节点。

我强烈建议不要使用任何包管理器安装节点,而是自己编译它,以便它驻留在具有正常权限的本地目录中。

本文提供了一个非常清晰的分步说明,说明如何执行此操作:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04

于 2015-01-23T17:28:56.277 回答
7

!~~ 对于 Docker ~~!

@Alexander Mills回答 - 只是更容易找到:

RUN npm set unsafe-perm true
于 2021-02-16T10:03:30.030 回答
2

我通过改变所有权来解决这个问题/usr/local~/Users/user-name如下所示:

sudo chown -R my_name /usr/local

这让我可以在没有sudo

于 2015-05-05T20:59:47.580 回答