Npm/约曼安装发电机-没有 sudo 的角

我试图安装发电机-angularjs 使用 Yo (约曼) 没有 Sudo:

npm install -g generator-angular

我得到了:

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

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

我有一个 ~/node_modules目录-为什么你不安装它的软件包呢?

47597 次浏览

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

yo

为全局安装设置 npm

那么,我们如何让 npm 在全球范围内安装软件包呢?正如您正确地指出的,您永远不应该使用 sudo 运行 yo。这个问题有 很多不同的解决方案,你可以花几个小时来认真讨论它们的优缺点。

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

启用 npm在全局范围内安装软件包的首选方法是 设置本地节点前缀

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

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

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 中的前缀没有改变任何东西。

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

我有一个几乎相同的错误,涉及一个流氓 .yo-rc.json文件在我的根目录从一个项目,我安装了早些时候。在安装过程的中途,约曼将 cwd 从安装目录切换到根目录,但只输出了 EACCESS 权限错误,没有提供安装目录是 /的任何细节。我花了很长时间才弄明白为什么会这样,并且通过 Yeoman 源代码进行了调试,但是我最终了解到,Yeoman 将通过目录树查找,直到找到一个 .yo-rc.json,然后通过调用 chdir 到新位置来在那里生成代码。

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

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

Sudo find/-name. yo-rc. json

Yoeman 开始了 Page出现以下命令:

yo doctor

在我的示例中,$NODE _ PATH (在我的示例中,Ubuntu 14.04在/etc/profile.d 中定义)与 npm root 不同。在 $NODE _ PATH 中添加 npm root 可以解决这个问题。

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

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

希望这能帮助任何处于类似情况的人。