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

202

我正在尝试在一个新的Ubuntu 12.04实例上设置我的node环境,并已经安装了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"
 },

因为我在自己的电脑(Mac)上已经成功安装了其余的开发依赖项,所以它们都是有效的。有人知道这是为什么吗?

6个回答

285

根据文档(还有这里):

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

您的选项有:

  1. Run npm install with the --unsafe-perm flag:

    [sudo] npm install --unsafe-perm
    
  2. Add the unsafe-perm flag to your package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. Don't use the preinstall script to install global modules, install them separately and then run the regular npm install without root privileges:

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

相关:


2
抱歉我直到现在才看到这个消息。我之前尝试过使用“unsafe-perm”,但它也没有起作用。问题仍然存在。 - E.H.
11
sudo npm install --unsafe-perm 对我有效,但 sudo npm install 不行,尽管我在 package.json 中添加了 "unsafe-perm":true ... 不太清楚原因。 - Dmitry Pashkevich
9
将其添加到package.json文件中的"config"属性实际上会设置"npm_package_config_unsafe_perm",因此选项2无法工作。请参考:https://dev59.com/A14b5IYBdhLWcg3wtjzY - justmoon
1
"unsafe-perm": true 对我也失败了。遗憾的是,它没有在错误消息中给出错误和上下文(包括其 UID 更改),而是消除了原因并提供了一些令人费解、令人惊讶和敌对的东西。 - android.weasel
虽然 npm install --unsafe-perm 对我来说有效,但我尝试遵循更改默认 user 配置的暗示。所以我执行了 npm set user my_usernpm set group my_group,这将在 root 用户的 .npmrc 文件中添加相应的条目。但问题是 node_modules 文件夹本身及其子文件夹仍然由 root 拥有,因此这并没有帮助解决问题。我无法找到任何方法使它们不再由 root 拥有。 - fulv
--unsafe-perm 也适用于 npm publish。这在从 CI 发布包时非常有用,因为容器中的构建通常以 root 用户身份运行。 - Lukas Knuth

89

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

unsafe-perm = true

将相同的配置添加到package.json中没有产生任何效果。


56
在 Docker 中: RUN npm set unsafe-perm true 的翻译是:运行 npm set unsafe-perm true 命令。 - Alexander Mills
如果您正在使用WSL,请键入“set unsafe-perm true”。这将有助于您。 - Stas Panyukov
那是最好的解决方案! - Konrad G
1
它对我也起作用了,谢谢 @Undistraction - Mayur

31

当我试图使用root用户在运行CentOS的私有服务器上发布我的Node.js应用程序时,我遇到了相同的问题。在我的package.json文件中,“postinstall”触发了相同的错误:“./node_modules/bower/bin/bower install”,所以对我有效的唯一解决方案是同时使用这两个选项以避免错误:

1: 对于bower安装命令,请使用--allow-root选项

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

2:在npm安装命令中使用--unsafe-perm选项。

npm install --unsafe-perm

15

!~~ 对于Docker ~~!

@Alexander Mills的回答 - 让它更容易被找到:

RUN npm set unsafe-perm true

14

3
我通过更改 /usr/local~/Users/user-name 的所有权来解决了这个问题,操作如下: sudo chown -R my_name /usr/local 这样我就可以在不使用 sudo 的情况下进行所有操作。

这应该是最好的答案。 - John Xiao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接