npm install vs sudo npm install -g
对于一些软件包,我必须运行sudo npm install -g
而对于其他的npm install
就足够了。
为什么和有什么区别?
例如:
npm install -g grunt-cli # doesn't work sudo npm install -g grunt-cli # works npm install websocket-stream # works
只有-g
标志才需要sudo
?
npm
在本地安装软件包,即。 在当前文件夹内的node_modules
文件夹中。 这使您的应用程序可以依赖于特定的软件包版本,而不必搞乱系统上已安装软件包的全局列表。 查看Isaac博客文章的第一段(同时处理同一事物的多个版本 ),这很好地解释了npm
如何避免在其他编程环境中经常遇到的依赖性问题。
另一方面,一些软件包被用作命令行工具,如grunt-cli
, mocha
或json
。 为了在任何地方使用它们,您需要全局安装它们,因此使用-g
参数。
请注意,你不应该需要sudo
来安装全局包,请参阅相关答案以获取更多信息。
-g
是全局的,不需要在本地安装软件包。
你用sudo运行它,因为它安装到默认用户可能默认无法访问的文件夹中。
npm install -g grunt-cli
以全局模式安装软件包,每个用户都可以使用它。 没有-g
你只需要把它安装在当前目录下。 如果您不是root用户,则需要使用sudo
作为-g
。 如果你使用不带-g
npm
,并且你有写权限到当前目录,那么sudo
是没有必要的。 否则,你仍然需要它。
grunt-cli
将提供一个可执行文件,将被放入你的PATH
,所以根据你的系统configuration,它将需要root权限。
从npm创build者看这篇文章 ,特别是关于用npm使用sudo的部分。
websocket-stream
是一个库,你的代码将会使用它,所以执行一些任务会更容易,通常它会被安装在你的项目的根目录下的node_modules
文件夹中。
看起来像权限问题。 -g在全局安装(你将需要“root”),但是以root身份安装它不是一个好主意在terminal运行:
sudo chown -R `whoami` ~/.npm