对于某些包,我需要运行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
标志时才是必需的吗?
对于某些包,我需要运行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
标志时才是必需的吗?
npm
本地安装包,即在当前文件夹内的 node_modules
文件夹中。这允许您的应用程序依赖于特定的软件包版本,而无需在系统上全局安装的软件包列表中进行配置。请参见 Isaac's 博客文章 的第一段(同时处理多个版本的相同内容),其中很好地解释了 npm
如何避免在其他编程生态系统中经常遇到的依赖关系问题。
另一方面,有些包旨在用作命令行实用程序,例如 grunt-cli
,mocha
或 json
。为了在任何地方使用它们,您需要全局安装它们,因此需要使用 -g
参数。
请注意,您不应该需要使用 sudo
安装全局包,请参见相关答案获取更多信息。
看起来是权限问题。-g 全局安装它(你需要 'root'),但不建议以 root 身份安装。 在终端中运行:
sudo chown -R `whoami` ~/.npm
npm install -g grunt-cli
在全局模式下安装包,每个用户都可以使用它。
没有 -g
,你只是在当前目录中安装它。
如果你不是 root 用户,你需要使用 sudo
来使用 -g
。
如果你使用 npm
没有 -g
并且你对当前目录有写权限,
那么 sudo
是不必要的。否则,你仍然需要它。
-g
是全局的,不加只会在本地安装包。
你需要使用sudo来运行它,因为它会安装到默认用户可能没有访问权限的文件夹中。
grunt-cli
会提供一个可执行文件,该文件将被放置在您的 PATH
中,因此根据您配置系统的方式,它将需要 root 访问权限。
请参阅 npm 创建者的这篇文章,特别是有关使用 sudo 和 npm 的部分。
websocket-stream
是一个库,您的代码将使用它,因此执行某些任务将更容易,通常它将安装在项目的根目录下,即 node_modules
文件夹中。