【问题标题】:NPM error when installing globally even when directories are writable即使目录可写,全局安装时也会出现 NPM 错误
【发布时间】:2013-01-25 01:04:49
【问题描述】:

尝试使用此命令安装咖啡脚本时出现此错误:

npm install -g --verbose coffee-script opal

这些是错误信息:

npm ERR! Error: EACCES, symlink '../lib/node_modules/coffee-script/bin/coffee'
npm ERR!  { [Error: EACCES, symlink '../lib/node_modules/coffee-script/bin/coffee']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '../lib/node_modules/coffee-script/bin/coffee' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm info postuninstall opal@0.3.2
npm ERR! Error: EACCES, symlink '../lib/node_modules/opal/bin/opal-node'
npm ERR!  { [Error: EACCES, symlink '../lib/node_modules/opal/bin/opal-node']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '../lib/node_modules/opal/bin/opal-node' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

文件夹 /usr/local/bin 和 /usr/local/lib/node_modules 由当前用户拥有和可写,我不想使用 root 运行该 npm 命令,如何知道 npm 尝试了哪个文件夹建立一个符号链接?

我正在使用 npm 1.2.9-1chl1~quantal1 和 nodejs 0.8.19-1chl1~quantal1

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    您的节点安装使用系统目录。使用-g时使用sudo

    sudo npm install -g --verbose coffee-script opal
    

    【讨论】:

    • 这样做有什么不安全的地方吗?
    • 那样做我会觉得不舒服。我宁愿以不需要 sudo 的方式安装节点。
    • sudo npm remove -g name-of-module
    • npm 的作者不鼓励 sudo npm,参见例如这里:stackoverflow.com/a/29787931/1614973
    • @DmitriZaitsev 确实如此,但在 OP 案例中,这是让他摆脱困境的最简单方法。修复他的 npm 缓存的权限并不是一个单一的解决方案。
    【解决方案2】:

    你可以chown NPM 的bin 到你的用户名用这一条线来解决这个问题:

    $ chown -R `whoami` `npm -g bin`
    

    【讨论】:

    • 小心!更改 /usr/bin/ 中所有内容的所有权(例如,sudo 也)
    【解决方案3】:

    啊,使用这个命令:

    npm -g bin
    

    它会输出如下内容:

    /usr/bin # this is the folder nodejs wanted to write..
    

    然后你可以chmodchown 以便可以编写安装。

    【讨论】:

    • 这是有用的信息,但不能回答问题。
    【解决方案4】:

    我在NPM modules won't install globally without sudo 遇到了类似的问题,问题是当我安装节点时,我通过 chris/lea ppa repo 使用 sudo 完成了它

    我的解决方案是卸载节点,然后以这种方式安装:

    从 nodejs.org 下载最新的稳定节点源 #in my case node-v0.10.20.tar.gz

    tar -zxf node-v0.10.20.tar.gz #解压缩源

    cd node-v0.10.20 #进入解压文件夹

    sudo chown $USER -R /usr/local

    ./configure --prefix=/usr/local && make && make install

    PD:如果您不想更改 /usr/local 文件夹的所有权,您可以将其安装在您已经拥有的位置。这种方法的问题是,您必须将安装文件夹与 bash 命令行绑定,以便我们稍后可以使用 node 命令

    mkdir ~/opt

    ./configure --prefix=~/opt && make && make install

    echo 'export PATH=~/opt/bin:${PATH}' >> ~/.bashrc #or ~/.profile or ~/.bash_profile or ~/.zshenv 取决于当前的操作系统

    使用其中任何一种方法,您都可以在不使用 sudo 的情况下执行以下操作

    npm install -g --verbose coffee-script opal

    【讨论】:

      【解决方案5】:

      遇到了类似的问题。原来我在用sudo 安装的project/node_modules 目录中有一些东西。在我的情况下,它是一些依赖项和 .bin 目录。我删除了这些坏目录,然后再次运行npm install,它成功了。我确实也重新安装了全局量角器和 phantomjs,但不确定是否需要。我确信这是错误的(即 root 拥有的).bin 目录造成的。

      【讨论】:

      • 您不必删除“坏”目录,只需按照其他答案中的说明设置它们的权限和/或所有权。
      猜你喜欢
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2018-09-11
      • 2014-10-31
      • 2020-04-19
      • 2018-03-14
      • 2015-04-27
      相关资源
      最近更新 更多