是否必须全局安装NPM软件包才能通过命令行访问其功能?

问题描述 投票:0回答:2

我无法理解-g标志在NPM中的工作方式。具体来说,我正在努力了解它与NPM模块公开的命令行功能之间的关系。

我假设在本地和全局安装软件包之间的区别仅仅是,在特定项目之外无法使用本地软件包。当然,在任何项目中都可以使用全局安装的软件包。我来自Rails背景,因此对我而言,这类似于将gem安装到特定的RVM中,而不是将其安装到全局RVM中。它只会影响哪些地方可用。

然而,在NPM中,似乎不仅仅是范围。对于具有命令行功能的程序包,例如wait-on,除非在全局范围内安装,否则,据我所知,该程序包在命令行上不可用。

本地安装无法使命令行功能可用:

$ npm install wait-on
$ wait-on
=> -bash: /usr/local/bin/wait-on: No such file or directory

全局安装确实提供了命令行功能

$ npm install wait-on -g 
$ wait-on
=> Usage: wait-on {OPTIONS} resource [...resource]

   Description:

     wait-on is a command line utility which will wait for files, ports,
     sockets, and http(s) resources to become available (or not available
     using reverse flag). Exits with  success code (0) when all resources
     are ready. Non-zero exit code if interrupted or timed out.

     Options may also be specified in a config file (js or json). For
     example --config configFile.js would result in configFile.js being
     required and the resulting object will be merged with any

您可以使用本地安装来显示命令行功能吗?

是否可以在本地安装但也可以获取命令行功能?这对于我的CI设置非常有帮助,因为缓存本地模块要比全局模块容易得多,因此在可能的情况下,我宁愿在本地安装。

bash circleci
2个回答
0
投票

本地安装使该软件包可用于当前项目(在其中将所有节点模块存储在node_modules中)。通常这仅适用于使用var module = require('module');这样的模块或导入模块。

在您全局安装npm install -g模块之前,shell将无法解析该命令,在npm将其安装到您的路径变量将解析此命令的位置。

您可以找到相当不错的解释here

将命令放在package.json的scripts块中也很有用,因为它会自动解析本地命令。这意味着您可以拥有一个依赖于程序包的脚本,而对该程序包没有未记录的依赖关系。

如果需要在cmd上本地运行,则必须进入node_modules并从路径运行。


0
投票

如果使用的是npm 5.2.0或更高版本,则默认包含npx命令。它将允许您从本地节点模块运行:npx wait-on

供参考:https://www.npmjs.com/package/npx

© www.soinside.com 2019 - 2024. All rights reserved.