npm / yeoman不使用sudo安装generator-angular


73

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

npm install -g generator-angular

我得到:

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

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

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


yo angular从哪里跑?
Scottux

Answers:


170

发电机设计为可全局安装。否则,您总是必须在每个项目中安装要使用的生成器,这不必要地麻烦。此外,您不会看到漂亮的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目录即可。


1
设置它时,PATH前面不应有“ $”。(我尝试执行编辑,但是有一个无用的规则,即“编辑必须至少包含6个字符”,因此保存被拒绝。)
2013年

1
@passy我仍然有访问权限问题,但是似乎设置了前缀:npm config get prefix => /home/friedrich/.node。知道为什么吗?〜/ .node在PATH中:-/
stephanfriedrich 2014年

2
我只是跑了sudo npm update -gf就解决了。我做了什么,在这种情况下使用sudo可以吗?
史蒂芬·史密斯

3
我还需要添加:sudo chown -R'username'〜/ .npm
Marco Ramires,

1
第二个命令应该是echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc
Ryan

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

2
对于最后一个命令,我不得不更改$USER:staff为Mac,或者只是$USER:USER
Matej 2014年

1
在OS X Mavericks中,我只有“〜/ .node-gyp”文件夹,而没有“〜/ node”文件夹。
MiB 2014年

0

您好(在ubuntu 12.04上),〜/ .npmrc中的前缀添加未更改任何内容。

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


0

我有一个几乎相同的错误,其中涉及.yo-rc.json我先前安装的项目的根目录中的恶意文件。Yeoman在安装过程中途将cwd从安装目录切换到根目录,但仅输出EACCESS权限错误,而没有安装目录为的任何详细信息/。我们花了很长时间才找出原因,并涉及通过Yeoman源进行调试,但是我最终了解到Yeoman将遍历目录树,直到找到a为止.yo-rc.json,然后通过将chdir调用到新位置在此生成代码。

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

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

sudo find / -name .yo-rc.json


0

yoeman入门页面上,显示以下命令:

yo doctor

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


有必要重新启动。另一种方法是在.bashrc中添加$ NODE_PATH = $ NODE_PATH:/ usr / local / lib / node_modules。
molavec

0

我一直试图让yeoman我发挥好vagrant箱子,这是我必须做的,安装npm在全球范围包而不sudoubuntu

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

希望这对发现自己处于类似情况的人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.