73

我尝试在没有 sudo的情况下使用 Yo ( Yoeman )安装 generator-angularjs :

npm install -g generator-angular

我得到:

Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular'

当我输入 时sudo yo,yo 告诉我不应该使用 sudo(这是完全可以理解的)。

我有一个~/node_modules目录 - 为什么不在那里安装它的包?

4

6 回答 6

173

发电机设计为在全球范围内安装。否则,您总是必须在每个项目中安装您将要使用的生成器,这是不必要的痛苦。此外,您不会看到yo列出所有可用生成器的可爱菜单(当然,除非您将它们全部安装在本地):

哟

为全局安装设置 npm

那么,我们如何让 npm 全局安装包呢?正如您所说的那样,您永远不应该yo使用 sudo 运行。这个问题有很多不同的解决方案,你可以花几个小时虔诚地讨论它们的利弊。

我个人不喜欢将我的用户包安装到全局 /usr/文件夹中。/usr/适用于计算机上所有用户共享的软件。即使它只是使用机器,仍然有充分的理由尊重 Unix 文件系统层次结构的设计方式。例如,如果您决定在某一时刻擦除整个节点安装。

我在不中断的情况npm下启用全局安装包的首选方法是设置本地节点前缀。这就像跑步一样简单$HOME

echo 'prefix = ~/.node' >> ~/.npmrc

在您的本地外壳中。之后,您要调整 $PATH,通过调整您最喜欢的 shell 配置来指向全局节点可执行文件的新安装目标。例如通过添加

export PATH="$PATH:$HOME/.node/bin"

到你的~/.bashrc. 之后,您可以在npm install -g generator-angular不使用 sudo 的情况下愉快地运行,而不会遇到权限冲突,如果某些东西完全损坏并且您想从头开始,您需要做的就是删除您的~/.node目录。

于 2013-08-16T15:41:29.923 回答
27

感谢@passy,我终于在 ubuntu 13.04 上实现了这个功能(以防有人遇到类似的设置问题),具体如下:

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

试图运行:

npm install -g yo

导致

Error: EACCES, mkdir '/usr/lib/node_modules/yo'

固定使用:

echo prefix = ~/.node >> ~/.npmrc
echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc 
. ~/.bashrc

跑步:

yo webapp

导致:

Error: EACCES, permission denied '/home/username/.config/configstore/update-notifier-yo.yml'

固定使用:

sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml
于 2013-10-15T11:12:11.247 回答
0

嗨,就我而言(在 ubuntu 12.04 上),在 ~/.npmrc 中添加的前缀并没有改变任何东西。

如果是这样,请自行构建节点包并将其安装在/opt/node 或 /home/user/.node中。

于 2014-07-02T13:02:49.160 回答
0

我有一个几乎相同的错误,涉及.yo-rc.json我之前安装的项目的根目录中的恶意文件。Yeoman 在安装过程中将 cwd 从安装目录切换到 root 目录,但只输出 EACCESS 权限错误,没有任何安装目录的详细信息/。花了很长时间才弄清楚为什么会这样,并通过 Yeoman 源代码进行调试,但我最终了解到,Yeoman 将通过目录树查找直到找到 a .yo-rc.json,并通过调用 chdir 到新位置生成代码。

Yeoman 可能应该检查用户是否具有目录的写权限。或者,它可以在输出中提及 cwd 已更改,或者如果它找到.yo-rc.json的位置与 cwd 不同,则打印安装目录的名称。

查找流氓 .yo-rc.json 文件的命令

sudo find / -name .yo-rc.json

于 2014-09-16T21:50:25.843 回答
0

yoeman 入门页面出现以下命令:

yo doctor

在我的例子中,$NODE_PATH(在我的例子中是 Ubuntu 14.04,在 /etc/profile.d 中定义)与 npm root 不同。在 $NODE_PATH 中添加 npm root 可以解决问题。

于 2016-02-27T19:38:28.980 回答
0

我一直在努力让yeoman我的盒子玩得很好,vagrant这是我必须在npm全球范围内安装软件包而无需sudoon ubuntu

1.创建存放全局包的目录

$ mkdir "${HOME}/.npm-packages"

2. 告诉npm在哪里放置全局安装的任何包

将此代码段插入到您的~/.npmrc文件中:

prefix=${HOME}/.npm-packages

3.确保npm可以找到已安装的binaries等等

将此片段插入您的.bashrc/.zshrc

NPM_PACKAGES="${HOME}/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

// `unset` `manpath` to allow inheritance from `/etc/manpath` with
// the `manpath` command
unset MANPATH // remove this line if you have previously modified `manpath`
export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

4.运行以下或重启终端

$ source ~/.bashrc

希望这可以帮助任何发现自己处于类似情况的人。

于 2016-03-30T19:17:20.123 回答