情形:
我写了一个cli脚本。它位于目录mycli
中,名为mycli.js
,并被标记为#!/usr/bin/env node
。在项目package.json
中,我添加了"name": "mycli", "bin": "mycli.js"
。
此时我可以通过两种方式从项目根调用mycli,可以是$ node mycli
,也可以是$ mycli.js
。
发布到npm并在全球范围内安装此软件包之后,我现在可以从任何地方调用$ mycli
或$ node mycli
,但是,本地安装并不会从其自己的项目根目录中显示相同的行为;我必须使用更合格的名称来调用脚本,可以是$ node_modules/mycli/mycli.js
或$ node node_modules/mycli/mycli
。
为什么没有$ node mycli
在本地情景中工作?
答案 0 :(得分:3)
请查看以下答案:How to use package installed locally in node_modules?
基本上,当您全局安装软件包时,将找到可执行文件,因为它位于PATH中。默认情况下,node_modules
目录不在您的PATH中。将系统上的每个node_modules
目录添加到PATH会变得非常混乱。
您可以使用echo $PATH
检查当前路径。您可以使用PATH=$(npm bin):$PATH
添加本地node_modules目录(对于会话的生命周期)。链接的答案还有一个替代使用别名。