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的主要内容,如果未能解决你的问题,请参考以下文章
如何解决Office加载项(Outlook)的此NPM / Yeoman错误日志?