Npm安装失败,并显示“无法在wd中运行”


153

我试图在已经安装了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"
 },

由于我已经将其完全安装在自己的计算机(Mac)上,因此其余的依赖关系仍然有效。有人知道为什么会这样吗?

Answers:


231

文档说(也在此处):

如果使用root特权调用npm,则它将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

相关


2
抱歉,直到现在我还没有看到这个。我以前尝试过“不安全烫发”,但也没有用。问题仍然存在
EH 2014年

10
这对我sudo npm install --unsafe-permsudo npm install"unsafe-perm":true
有用

8
将其添加到package.json中的“ config”属性中实际上会设置“ npm_package_config_unsafe_perm”,因此选项2不起作用。请参阅:stackoverflow.com/questions/28763958/...
justmoon

'不安全的烫发':true对我也失败了。遗憾的是,它没有在错误消息中给出错误和上下文(包括其ui​​d更改),而不是愚蠢地排除了原因,并给出了一些神秘,令人惊讶且充满敌意的东西。
android.weasel

虽然npm install --unsafe-perm对我有用,但我尝试遵循有关更改默认user配置的含义。因此,我做了npm set user my_usernpm set group my_group,它在根用户的.npmrc文件中添加了相应的条目。但是问题在于node_modules文件夹本身及其子文件夹仍由root拥有,因此无济于事。我想不出任何办法让它们不归root所有。
fulv '19

53

对我唯一有效的方法是添加一个.npmrc包含以下内容的文件:

unsafe-perm = true

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


35
在码头工人中:RUN npm set unsafe-perm true
Alexander Mills '18

如果您使用的是WSL,则只需输入set unsafe-perm true。这将对您有帮助
Stas Panyukov

26

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

1:对弓箭手安装命令使用--allow-root选项

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

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

npm install --unsafe-perm

12

OP在这里,自从我第一次提出这个问题以来,我已经学到了更多关于节点的知识。尽管Dmitry的回答非常有帮助,但最终对我来说,是使用正确的权限安装节点。

我强烈建议不要使用任何程序包管理器来安装节点,而是自己进行编译,使其位于具有正常权限的本地目录中。

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

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


2

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

sudo chown -R my_name /usr/local

这使我无需做任何事情 sudo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.