npm命令 - sudo与否?

时间:2013-05-23 21:33:12

标签: macos npm sudo

目前我总是运行sudo npm install <package-name>,但据我所知,这是不正确的。

我希望有机会不以root用户身份使用它。 我遵循了一些建议并使用了这个命令sudo chown -R <username> ~/.npm但它不起作用......

例如,它是我的npm install jade

的输出
...
npm http 200 https://registry.npmjs.org/amdefine
npm http GET https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm http 200 https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm ERR! Error: EACCES, symlink '../jade/bin/jade'
npm ERR!  { [Error: EACCES, symlink '../jade/bin/jade'] errno: 3, code: 'EACCES', path: '../jade/bin/jade' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

如您所见,下载已成功启动但随后失败..

我想知道在npm上禁止sudo的最佳方法是什么?

5 个答案:

答案 0 :(得分:15)

没有npm install -g的{​​{1}}节点模块是可能的(也是可取的)。

检查sudo文件夹的权限。我已经通过brew安装了node和npm(没有/usr/local/share/npm/bin),并且该特定文件夹最终归root所有。

这一劳永逸地修复了它:

sudo

(至于使用npm禁止$ sudo chown $(whoami) /usr/local/share/npm/bin :你必须为此调整npm。你自己的节点代码可以使用https://npmjs.org/package/sudo-blocksudo

编辑即使这样有效,我也不再使用npm install sudo-block。而是使用前缀(参见下一个答案),或者更好地使用NIX https://unix.stackexchange.com/a/381797(甚至在OSX上)

答案 1 :(得分:14)

在我看来,这是指定npm前缀的最简洁方法:

npm config set prefix ~/.node_modules

然后将以下内容添加到.bash_profile

export PATH=$HOME/.node_modules/bin:$PATH

现在,软件包将安装到您的用户目录中,并且不会授予任何权限。


编辑:如果您无法安装 yeoman ,请在名为 yodoctor 的一个PATH目录中创建一个bash文件,其中包含以下内容

#!/bin/bash
yo doctor

使用

使文件可执行
chmod +x yodoctor

现在你应该能够安装自己。

答案 2 :(得分:2)

你也可以这样做:

sudo chown -R $USER /usr/local

并递归地将文件更改为当前用户。

答案 3 :(得分:1)

我发现这是一个更好的解决方案

sudo chown -R $USER /Users/$USER

这只会将用户的所有者更改为您,而npm应安装在OS X上的用户下。 我一直在阅读的所有内容都说sud for npm installs很糟糕,当你打开自己的恶意脚本时,我不得不同意它们。

答案 4 :(得分:0)

这里提供的两个解决方案不是我推荐的,因为它们是强力解决方案。相反,我建议阅读One does not simply sudo npm