npm / yeoman安装generator-angular without sudo

时间:2013-08-13 14:42:35

标签: angularjs npm sudo yeoman

我尝试使用Yo(Yoeman安装generator-angularjs而不使用sudo

npm install -g generator-angular

我明白了:

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

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

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

6 个答案:

答案 0 :(得分:168)

生成器设计为全局安装。否则,您始终必须安装即将在每个项目中使用的生成器,这会造成不必要的痛苦。此外,您无法看到可爱的yo菜单,其中列出了所有可用的生成器(当然,除非您在本地安装所有):

yo

为全局安装设置npm

那么,我们如何让npm在全球范围内安装软件包呢?正如你所说的那样,你永远不应该用sudo运行yo。这个问题有lots of different solutions,你可以花几个小时虔诚地讨论他们的利弊。

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

启用npm全局安装软件包的首选方式,而不会超出$HOME to set a local node prefix。这就像运行一样简单

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

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

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

~/.bashrc。之后,您可以愉快地运行npm install -g generator-angular而无需sudo,不会遇到权限冲突,如果某些内容完全中断并且您想从头开始,您只需删除~/.node目录。< / p>

答案 1 :(得分:26)

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

答案 2 :(得分:0)

在我的情况下(在ubuntu 12.04上),〜/ .npmrc中的前缀添加没有改变任何内容。

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

答案 3 :(得分:0)

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

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

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

sudo find / -name .yo-rc.json

答案 4 :(得分:0)

yoeman getting started page出现命令:

yo doctor

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

答案 5 :(得分:0)

我一直试图让yeoman与我的vagrant框一起玩得很好,这就是我必须要做的就是在没有npm的情况下全局安装sudo个套件{ {1}}:

1。创建存储全局包的目录

ubuntu

2。告诉$ mkdir "${HOME}/.npm-packages"将全局安装的软件包放在哪里

将此代码段插入npm文件:

~/.npmrc

3。确保prefix=${HOME}/.npm-packages可以找到已安装的npm等等

将此代码段插入binaries

.bashrc/.zshrc

4。运行以下命令或重新启动终端

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)"

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