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-climochajson 。 为了在任何地方使用它们,您需要全局安装它们,因此使用-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