我正在尝试在已经安装了Node 0.8.14的新Ubuntu 12.04实例上设置我的节点环境,但是当我尝试运行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) 有没有人知道为什么会这样?
答案 0 :(得分:195)
documentation说(也here):
如果使用root权限调用npm,则会将uid更改为
user
配置指定的用户帐户或uid,默认为nobody
。设置unsafe-perm
标志以运行具有root权限的脚本。
您的选择是:
使用npm install
标记运行--unsafe-perm
:
[sudo] npm install --unsafe-perm
将unsafe-perm
标记添加到package.json
:
"config": {
"unsafe-perm":true
}
不要使用preinstall
脚本来安装全局模块,单独安装它们然后运行没有root权限的常规npm install
:
sudo npm install -g coffee-script node-gyp
npm install
相关强>:
答案 1 :(得分:28)
唯一对我有用的是添加一个.npmrc
文件,其中包含:
unsafe-perm = true
将相同的配置添加到package.json
没有任何效果。
答案 2 :(得分:25)
尝试使用root用户在运行CentOs的私有服务器中发布我的nodejs应用时遇到了同样的问题。 “postinstall”:我的package.json文件中的“./node_modules/bower/bin/bower install”触发了同样的错误,因此唯一适合我的解决方案是使用这两个选项来避免错误:
1:对bower install命令使用--allow-root选项
"postinstall": "./node_modules/bower/bin/bower --allow-root install"
2:对npm install命令使用--unsafe-perm选项
npm install --unsafe-perm
答案 3 :(得分:10)
OP在这里,自从我第一次提出这个问题以来,我已经学到了很多关于节点的知识。虽然Dmitry的回答非常有用,但最终对我来说最重要的是安装具有正确权限的节点。
我强烈建议不要使用任何软件包管理器安装节点,而是自己编译它,以便它驻留在具有正常权限的本地目录中。
本文提供了如何执行此操作的非常明确的逐步说明:
答案 4 :(得分:4)
@Alexander Mills 回答 - 只是为了更容易找到:
RUN npm set unsafe-perm true
答案 5 :(得分:1)
我通过更改/usr/local
和~/Users/user-name
的所有权来解决此问题:
sudo chown -R my_name /usr/local
这使我可以在没有sudo