本地安装的node.js cli调用不像全局一样
场景:
我写了一个cli脚本。 它位于目录mycli
,名为mycli.js
并作为#!/usr/bin/env node
shebanged。 在项目的package.json
我包含了"name": "mycli", "bin": "mycli.js"
。
在这一点上,我可以通过两种方式从项目根目录调用mycli,无论是$ node mycli
还是$ mycli.js
。
在发布到npm并全局安装这个包之后,我现在可以从任何地方调用$ mycli
或者$ node mycli
,但是本地安装不会在它自己的项目根目录中performance出相同的行为。 我必须使用更合适的名称来调用脚本,可以是$ node_modules/mycli/mycli.js
或$ node node_modules/mycli/mycli
。
为什么$ node mycli
不能在本地场景中运行?
看看下面的答案: 如何使用在node_modules本地安装的软件包?
基本上,当你在全局安装一个软件包的时候,可执行文件会被find,因为它在PATH中。 node_modules
目录默认不在PATH中。 将系统中的每个node_modules
目录添加到PATH将变得相当混乱。
您可以使用echo $PATH
检查当前的echo $PATH
。 您可以使用PATH=$(npm bin):$PATH
来添加本地node_modules目录(在会话的整个生命周期中)。 链接的答案也有一个替代使用别名。