npm / yeoman 在没有 sudo 的情况下安装 generator-angular

Posted

技术标签:

【中文标题】npm / yeoman 在没有 sudo 的情况下安装 generator-angular【英文标题】:npm / yeoman install generator-angular without sudo 【发布时间】:2013-08-15 06:01:40 【问题描述】:

我尝试使用 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 【参考方案1】:

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

为全局安装设置 npm

那么,我们如何让 npm 全局安装包?正如您所说的那样,您永远不应该使用 sudo 运行 yo。这个问题有lots of different solutions,你可以花几个小时认真地讨论他们的利弊。

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

npm 能够在全球范围内安装软件包而不破坏$HOME的首选方式是to set a local node prefix。这就像跑步一样简单

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

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

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

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

【讨论】:

设置时PATH前面不应该有'$'。 (我尝试进行编辑,但有一条无用的规则,即“编辑必须至少为 6 个字符”,因此保存被拒绝。) @passy 我仍然有访问权限问题,但似乎设置了前缀:npm config get prefix => /home/friedrich/.node。知道为什么吗? ~/.node 在 PATH 中:-/ 我刚刚跑了sudo npm update -gf 并修复了它。我做了什么,在这种情况下我使用 sudo 可以吗? 我还需要添加:sudo chown -R 'username' ~/.npm 第二个命令应该是echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc【参考方案2】:

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

【讨论】:

对于最后一个命令,我必须更改为$USER:staff for mac,或者只是$USER:USER 我在 OS X Mavericks 中只有“~/.node-gyp”文件夹而不是“~/node”。【参考方案3】:

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

如果有,请自行构建node包并安装在/opt/node或/home/user/.node中。

【讨论】:

【参考方案4】:

我有一个几乎相同的错误,涉及我之前安装的项目的根目录中的流氓.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

【讨论】:

【参考方案5】:

从yoeman getting started page 出现命令:

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。【参考方案6】:

我一直在努力让yeoman 与我的vagrant 盒子配合得很好,这就是我在ubuntu 上没有sudo 的情况下在全球范围内安装npm 软件包所必须做的:

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

$ mkdir "$HOME/.npm-packages"

2。告诉npm 将全局安装的任何软件包放在哪里

将此 sn-p 插入到您的 ~/.npmrc 文件中:

prefix=$HOME/.npm-packages

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

将此 sn-p 插入您的 .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

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

【讨论】:

以上是关于npm / yeoman 在没有 sudo 的情况下安装 generator-angular的主要内容,如果未能解决你的问题,请参考以下文章

NPM 模块不会在没有 sudo 的情况下全局安装

詹金斯:没有sudo的npm安装失败

如何解决Office加载项(Outlook)的此NPM / Yeoman错误日志?

npm、bower、gulp、Yeoman 和 grunt 有啥用?

Yeoman - 无法安装生成器

npm,bower,gulp,Yeoman和grunt有什么好处?