我尝试在没有 sudo的情况下使用 Yo ( Yoeman )安装 generator-angularjs :
npm install -g generator-angular
我得到:
Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular'
当我输入 时sudo yo,yo 告诉我不应该使用 sudo(这是完全可以理解的)。
我有一个~/node_modules目录 - 为什么不在那里安装它的包?
发电机设计为在全球范围内安装。否则,您总是必须在每个项目中安装您将要使用的生成器,这是不必要的痛苦。此外,您不会看到yo列出所有可用生成器的可爱菜单(当然,除非您将它们全部安装在本地):

那么,我们如何让 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目录。
感谢@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我之前安装的项目的根目录中的恶意文件。Yeoman 在安装过程中将 cwd 从安装目录切换到 root 目录,但只输出 EACCESS 权限错误,没有任何安装目录的详细信息/。花了很长时间才弄清楚为什么会这样,并通过 Yeoman 源代码进行调试,但我最终了解到,Yeoman 将通过目录树查找直到找到 a .yo-rc.json,并通过调用 chdir 到新位置生成代码。
Yeoman 可能应该检查用户是否具有目录的写权限。或者,它可以在输出中提及 cwd 已更改,或者如果它找到.yo-rc.json的位置与 cwd 不同,则打印安装目录的名称。
查找流氓 .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 可以解决问题。
我一直在努力让yeoman我的盒子玩得很好,vagrant这是我必须在npm全球范围内安装软件包而无需sudoon ubuntu:
$ mkdir "${HOME}/.npm-packages"
npm在哪里放置全局安装的任何包~/.npmrc文件中:prefix=${HOME}/.npm-packages
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)"
$ source ~/.bashrc
希望这可以帮助任何发现自己处于类似情况的人。