【问题标题】:Npm install failed with "cannot run in wd"Npm 安装失败,“无法在 wd 中运行”
【发布时间】:2013-08-10 19:10:12
【问题描述】:

我正在尝试在一个新的 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"
 },

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

【问题讨论】:

    标签: node.js package npm node-modules


    【解决方案1】:

    documentation 说(也是here):

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

    您的选择是:

    1. 使用--unsafe-perm 标志运行npm install

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

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

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

    相关

    【讨论】:

    • 对不起,我直到现在才看到这个。我之前尝试过“不安全烫发”,但也没有用。问题依然存在
    • 这对我有用:sudo npm install --unsafe-perm,但是 sudo npm install 没有,虽然我在 package.json 中添加了 "unsafe-perm":true... 不知道为什么
    • 将其添加到 package.json 中的“config”属性实际上设置了“npm_package_config_unsafe_perm”,因此选项 2 不起作用。见:stackoverflow.com/questions/28763958/…
    • 'unsafe-perm': true 对我来说也失败了。遗憾的是它没有在错误消息中给出错误和上下文(包括其 uid 更改),而不是使原因变得不存在并给出一些神秘、令人惊讶和敌对的东西。
    • 虽然npm install --unsafe-perm 对我有用,但我尝试遵循更改默认user 配置的含义。所以我做了npm set user my_usernpm set group my_group,在root用户的.npmrc文件中添加了相应的条目。但问题是node_modules 文件夹本身及其子文件夹仍归根用户所有,因此无济于事。我想不出任何办法让它们不归 root 所有。
    【解决方案2】:

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

    unsafe-perm = true
    

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

    【讨论】:

    • 在泊坞窗中:RUN npm set unsafe-perm true
    • 如果您使用 WSL,只需键入 set unsafe-perm true。这将帮助你
    • 这是最好的解决方案!
    【解决方案3】:

    我在尝试使用 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
    

    【讨论】:

      【解决方案4】:

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

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

      本文提供了一个非常清晰的分步说明:

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

      【讨论】:

        【解决方案5】:

        !~~ 对于 Docker ~~!

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

        RUN npm set unsafe-perm true
        

        【讨论】:

          【解决方案6】:

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

          sudo chown -R my_name /usr/local

          这让我可以在没有sudo 的情况下做任何事情

          【讨论】:

          • 这应该是最好的答案了。
          猜你喜欢
          • 2017-08-28
          • 2020-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-15
          • 2017-02-04
          • 2012-12-07
          相关资源
          最近更新 更多