即使目录可写,全局安装时也会出现 NPM 错误
Posted
技术标签:
【中文标题】即使目录可写,全局安装时也会出现 NPM 错误【英文标题】:NPM error when installing globally even when directories are writable 【发布时间】: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
【问题讨论】:
【参考方案1】:您的节点安装使用系统目录。使用-g时使用sudo
sudo npm install -g --verbose coffee-script opal
【讨论】:
这样做有什么不安全的地方吗? 那样做我会觉得不舒服。我宁愿以不需要 sudo 的方式安装节点。sudo npm remove -g name-of-module
npm
的作者不鼓励 sudo npm
,参见例如这里:***.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..
然后你可以chmod
或chown
以便可以编写安装。
【讨论】:
这是有用的信息,但不能回答问题。【参考方案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
目录造成的。
【讨论】:
您不必删除“坏”目录,只需按照其他答案中的说明设置它们的权限和/或所有权。以上是关于即使目录可写,全局安装时也会出现 NPM 错误的主要内容,如果未能解决你的问题,请参考以下文章
即使 IAM 角色具有完整的 Redshift 权限,AWS Lambda 在调用 Redshift 的“CreateCluster”操作时也会出现“拒绝访问”错误
Spring Boot 2.0.3 Oauth2 安全性:即使在标头中使用访问令牌时也会出现 401 错误