npm / yeoman安装generator-angular没有sudo

我试图使用哟( Yoeman ) 没有sudo安装generator-angularjs:

npm install -g generator-angular 

我得到:

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

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

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

发电机被devise成全球安装。 否则,你总是必须安装你要在每个项目中使用的发电机,这是不必要的痛苦。 此外,你不会看到可爱的yo菜单列出你所有可用的发电机(除非当然,你在本地安装):

哟

为全局安装设置npm

那么,我们如何让npm在全球范围内安装软件包呢? 正如你所说的,你永远不应该用sudo跑yo 。 这个问题有很多不同的解决方法,你可以花几个小时来讨论他们的优点和缺点。

我个人不喜欢将我的用户软件包安装到全局 /usr/文件夹中。 /usr/是用于在计算机上的所有用户之间共享的软件。 即使只使用机器,仍然有很好的理由来尊重Unix文件系统层次结构的devise方式。 例如,如果您决定一次性清除整个节点的安装。

我的首选方法是使用npm来全局安装软件包, 而不用 npm $HOME而是设置一个本地节点前缀 。 这和跑步一样简单

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

在你的本地shell中。 之后,你想调整你的$ PATH,通过调整你喜欢的shell的configuration来指向全局节点可执行文件的新安装目标。 例如通过添加

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

到你的~/.bashrc 。 之后,你可以在没有sudo的情况下快速运行npm install -g generator-angular ,而不会遇到权限冲突,如果有什么事情完全中断,你想从头开始,所有你需要做的就是删除~/.node目录。

感谢@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 

嗨在我的情况下(在Ubuntu的12.04),在〜/ .npmrc的前缀增加没有改变任何东西。

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

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

Yeoman也许应该检查用户是否有写目录的权限。 或者,可以在输出中提到cwd已经更改,或者如果发现.yo-rc.json与cwd不同,则输出安装目录的名称。

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

sudo find / -name .yo-rc.json

从yoeman入门页面出现命令:

 yo doctor 

在我的情况下,$ NODE_PATH(在我的例子中,Ubuntu 14.04在/etc/profile.d中定义)与npm root不同。 在$ NODE_PATH中添加npm root解决了这个问题。

我一直在努力让自己的玩家和我的vagrant玩的很好,这就是我在ubuntu上不使用sudo在全局安装npm软件包所需要做的事情:

1.创build存储全局包的目录

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

2.告诉npm把全球安装的软件包放在哪里

把这个片段插入你的~/.npmrc文件中:

prefix=${HOME}/.npm-packages

3.确保npm可以find安装的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.运行以下或重新启动terminal

$ source ~/.bashrc

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