npm install vs sudo npm install -g

时间:2013-11-28 10:55:05

标签: javascript node.js npm sudo

对于某些软件包我必须运行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

只有sudo标志需要-g吗?

5 个答案:

答案 0 :(得分:11)

npm在本地安装软件包,即。在当前文件夹中的node_modules文件夹中。这允许您的应用程序依赖于特定的软件包版本,而不必弄乱系统上已安装软件包的全局列表。请参阅Isaac's blog post的第一段(同时处理同一事物的多个版本),这很好地解释了npm如何避免在其他编程生态系统中经常遇到的依赖性

另一方面,某些包应用作命令行实用程序,例如grunt-climochajson。为了在任何地方使用它们,您需要全局安装它们,因此-g参数。

请注意,您不需要sudo来安装全局程序包,有关详细信息,请参阅this relevant answer

答案 1 :(得分:1)

-g是全球性的,不需要在本地安装软件包。

您在安装到默认用户默认无法访问的文件夹时使用sudo运行它。

答案 2 :(得分:0)

npm install -g grunt-cli以全局模式安装软件包,每个用户都可以使用它。 没有-g,您只需将其安装在当前目录中即可。 如果您不是root用户,则需要sudo使用-g。 如果您使用npm而没有-g并且您具有当前目录的写权限,那么 sudo没有必要。否则,你仍然需要它。

答案 3 :(得分:0)

grunt-cli将提供一个可执行文件,该文件将放在PATH中,因此根据您配置系统的方式,它将需要root权限。
请参阅this post from npm creator,特别是关于在npm中使用sudo的部分。

websocket-stream是一个库,您的代码将使用它,因此执行某些任务会更容易,通常它将安装在项目的根目录,node_modules文件夹中。

答案 4 :(得分:0)

看起来权限问题。 -g全局安装(你需要'root'),但以root身份安装它并不是一个好主意 在终端运行中:

sudo chown -R `whoami` ~/.npm