npm install和npm list的-g选项有什么作用?

时间:2015-11-03 02:51:40

标签: node.js macos npm

Node.js npm(节点包管理器)有一个-g命令行参数,我经常看到它被引用。例如,Microsoft Azure x-plat (cross-platform) CLI tool的文档说明使用npm install -g azure-cli安装它。

问题:-g选项有什么作用?

2 个答案:

答案 0 :(得分:3)

我有什么选项来安装节点模块?

写完这篇文章之后我很快就找到了陈旧但仍然是applicable post的Isaac(是的,npm @isaacs)。但我仍然认为以下帖子是信息性的。

您可以安装npm模块 globally locally - 您已经知道,但为什么?

  1. 全球: npm install -g some-module-a:此模块旨在用作可执行文件(即CLI,文件观察程序,代码缩写器,记录程序等)。
  2. 本地: npm install some-module-b:要通过导入导入并在您的应用中使用,var someModule = require('some-module)
  3. 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(想象npmbowergulpgrunt等等。

    让我们看一下全局安装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包。

来自the documentation

  

有两种方法可以安装npm软件包:本地或全局。您可以根据要使用包的方式选择要使用的安装类型。

     

如果您想将它用作命令行工具,例如grunt CLI,那么您可以想要全局安装它。另一方面,如果您想使用Node's require等依赖于您自己模块的软件包,那么您希望在本地安装。

     

要全局下载软件包,只需使用命令npm install -g,例如: