Node.js npm
(节点包管理器)有一个-g
命令行参数,我经常看到它被引用。例如,Microsoft Azure x-plat (cross-platform) CLI tool的文档说明使用npm install -g azure-cli
安装它。
问题:-g
选项有什么作用?
答案 0 :(得分:3)
写完这篇文章之后我很快就找到了陈旧但仍然是applicable post的Isaac(是的,npm @isaacs)。但我仍然认为以下帖子是信息性的。
您可以安装npm
模块 globally
或 locally
- 您已经知道,但为什么?
npm install -g some-module-a
:此模块旨在用作可执行文件(即CLI,文件观察程序,代码缩写器,记录程序等)。 npm install some-module-b
:要通过导入导入并在您的应用中使用,var someModule = require('some-module)
global
个模块是npm
的最佳创意之一。我们可以使用node/javascript
轻松创建可执行文件。如果您的节点应用程序要作为可执行文件运行,那么您将希望其他人安装它globally
。如果它是实用程序,帮助程序,应用程序等,那么您通常不希望它全局安装。因此,除非模块明确声明您应该使用-g
安装它,否则不要。
再次:如果您想在节点应用中使用名为some-module
的模块var someModule = require('some-module')
,那么npm install some-module
来自您的根目录节点应用程序将其拉入您的本地node_modules
目录。如果您已在全局而非本地安装some-module
,则通常不加载,并会显示有关未找到模块的错误(即使可以加载模块全局模块 - 提示:just don't!)
globally
时会发生什么? npm install -g [some module]
将指定的节点模块安装在文件系统中较高的目录中(即在unix系统中通常为/usr/local/lib/node_modules
)。全局模块的最大用例是使用节点编写的CLI
(想象npm
,bower
,gulp
,grunt
等等。
让我们看一下全局安装bower
时会发生什么:
*在命令行/终端
步骤:npm install -g bower
说明:模块 - 所有文件和依赖项 - 都保存在您的全局目录中(例如/ usr / local / lib / node_modules / bower)。
这里发生了其他事情。不知何故,您现在可以在命令行中运行bower
。真棒!
步骤:bower -v
- >导致安装的凉亭版本(即1.6.5
)
解释:它现在是一个完全可执行的节点应用,使用bower
作为关键字。在bower
package.json
个文件中,您将找到bin
属性:
"bin": {
"bower": "bin/bower"
}
npm
会将大多数可执行文件所在的symlink创建为/usr/local/bin/bower
到模块所在的/usr/local/lib/node_modules/bower/bin/bower
。该符号链接使得当可执行文件运行时,它可以引用原始模块中的其他文件,包括它的本地node_modules
。很酷,嗯?
*关于可执行文件的注意事项:如果您在awesomeness
和/usr/local/bin/
(用户+可执行文件)中创建了一个名为chmod u+x
的文件。然后在其中编写一些脚本(在这种情况下,javascript使用顶部的#!/usr/bin/env node
)。然后,只需键入awesomeness
即可在命令行/终端的任何位置运行它。
希望有所帮助。我知道深入了解它对我的帮助很早。
答案 1 :(得分:2)
Node.js包可以通过以下两种方式之一安装:
-g
选项指示npm
全局安装软件包。如果您希望能够直接从终端调用命令,则可以全局安装Node.js包。
有两种方法可以安装npm软件包:本地或全局。您可以根据要使用包的方式选择要使用的安装类型。
如果您想将它用作命令行工具,例如grunt CLI,那么您可以想要全局安装它。另一方面,如果您想使用Node's require等依赖于您自己模块的软件包,那么您希望在本地安装。
要全局下载软件包,只需使用命令npm install -g,例如: