25

目前我总是跑步sudo npm install <package-name>,但据我所知这是不正确的。

我希望有机会不将其用作 root/Administrator。我听从了一些建议并使用了这个命令sudo chown -R <username> ~/.npm,但它不起作用......

例如,这是我的输出npm install jade

...
npm http 200 https://registry.npmjs.org/amdefine
npm http GET https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm http 200 https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm ERR! Error: EACCES, symlink '../jade/bin/jade'
npm ERR!  { [Error: EACCES, symlink '../jade/bin/jade'] errno: 3, code: 'EACCES', path: '../jade/bin/jade' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

如您所见,下载成功开始但随后失败..

我想知道在 npm 上禁止 sudo 的最佳方法是什么?

4

5 回答 5

15

npm install -g没有sudo. _

检查您的/usr/local/share/npm/bin文件夹的权限。我已经通过 brew (没有sudo)安装了 node 和 npm,并且该特定文件夹最终归 root 所有。

这一劳永逸地修复了它:

$ sudo chown $(whoami) /usr/local/share/npm/bin

(至于禁止sudo使用 npm:您必须为此调整 npm。您自己的节点代码可以使用https://npmjs.org/package/sudo-blocknpm install sudo-block

编辑:即使这有效,我不再使用-g. 而是使用前缀(参见下一个答案),或者更好的是使用 NIX https://unix.stackexchange.com/a/381797(即使在 OSX 上)

于 2013-08-18T05:59:10.847 回答
14

在我看来是指定 npm 前缀的最简洁的方法:

npm config set prefix ~/.node_modules

然后将以下内容添加到您的 .bash_profile

export PATH=$HOME/.node_modules/bin:$PATH

现在软件包将安装到您的用户目录中,并且不会损害任何权限。


编辑:如果您无法安装yeoman ,请在名为yodoctor的 PATH 目录之一中创建一个 bash 文件,其中包含以下内容

#!/bin/bash
yo doctor

使文件可执行

chmod +x yodoctor

现在你应该可以安装 yeoman 了。

于 2014-08-22T13:06:11.617 回答
2

你也可以这样做:

sudo chown -R $USER /usr/local

并递归地将文件更改为您当前的用户。

于 2013-09-04T15:38:24.123 回答
1

我发现这是一个更好的解决方案

sudo chown -R $USER /Users/$USER

这只会将您的用户的所有者更改为您,并且 npm 应该安装在 OS X 上的您的用户下。我一直在阅读的所有内容都说 sudo 用于 npm 安装是不好的,当您打开自己时,我必须同意他们恶意脚本。

于 2014-03-07T19:27:51.490 回答
0

这里提供的两种解决方案不是我推荐的,因为它们是蛮力解决方案。相反,我建议阅读One does not simple sudo npm

于 2014-02-28T21:24:26.087 回答