Npm安装失败,"无法在wd中运行"

E.H*_*.H. 133 package node.js npm node-modules

我试图在新的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.
Run Code Online (Sandbox Code Playgroud)

但是当尝试将其作为sudo运行时,它会说以下内容:

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

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

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },
Run Code Online (Sandbox Code Playgroud)

其余的devdependencies是有效的,因为我已经在我自己的机器上安装它(Mac)有没有人知道为什么会发生这种情况?

Dmi*_*ich 212

文件说,(也是在这里):

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

你的选择是:

  1. npm install--unsafe-perm旗子运行:

    [sudo] npm install --unsafe-perm
    
    Run Code Online (Sandbox Code Playgroud)
  2. unsafe-perm标志添加到您的package.json:

    "config": {
        "unsafe-perm":true
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 不要使用该preinstall脚本来安装全局模块,单独安装它们然后运行npm install没有root权限的常规模块:

    sudo npm install -g coffee-script node-gyp
    npm install
    
    Run Code Online (Sandbox Code Playgroud)

相关:

  • 这对我有用:`sudo npm install --unsafe-perm`,但`sudo npm install`没有,虽然我添加了``unsafe-perm':true` to package.json ...不知道为什么 (9认同)
  • 将它添加到package.json中的"config"属性实际上设置"npm_package_config_unsafe_perm",因此选项2不起作用.请参阅:http://stackoverflow.com/questions/28763958/nodejs-unsafe-perm-not-working-on-package-json (8认同)
  • `"unsafe-perm":true`对我来说也不起作用. (5认同)
  • 抱歉,直到现在我还没有看到这个。我之前尝试过“不安全烫发”,但也没有用。问题仍然存在 (2认同)

Und*_*ion 35

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

unsafe-perm = true
Run Code Online (Sandbox Code Playgroud)

添加相同的配置package.json没有任何影响.

  • 在docker中:`RUN npm set unsafe-perm true` (22认同)

Yas*_*lek 26

尝试使用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"
Run Code Online (Sandbox Code Playgroud)

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

npm install --unsafe-perm
Run Code Online (Sandbox Code Playgroud)


E.H*_*.H. 10

OP在这里,自从我第一次提出这个问题以来,我已经学到了很多关于节点的知识.虽然Dmitry的回答非常有用,但最终对我来说最重要的是安装具有正确权限的节点.

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

本文提供了如何执行此操作的非常明确的逐步说明:

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


Yit*_*hak 5

!~~ 对于 Docker ~~!

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

RUN npm set unsafe-perm true
Run Code Online (Sandbox Code Playgroud)