对于某些软件包我必须运行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
吗?
答案 0 :(得分:11)
npm
在本地安装软件包,即。在当前文件夹中的node_modules
文件夹中。这允许您的应用程序依赖于特定的软件包版本,而不必弄乱系统上已安装软件包的全局列表。请参阅Isaac's blog post的第一段(同时处理同一事物的多个版本),这很好地解释了npm
如何避免在其他编程生态系统中经常遇到的依赖性
另一方面,某些包应用作命令行实用程序,例如grunt-cli
,mocha
或json
。为了在任何地方使用它们,您需要全局安装它们,因此-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