我正在开发一个需要从shell运行的节点包。我知道我必须全局安装软件包,但正在运行
$> npm install -g ./my_module
没有给我想要的结果,那就是正在运行
$> my_module
结果是
my_module: : command not found
而不是运行我的节点包的入口点(index.js
)。
我觉得我在这里遗漏了一些明显的东西,我做错了什么?
请尝试打包模块并安装。
npm pack
然后全局安装它
npm i -g my_module-0.0.1.tgz
让我知道这是否有效
我最近遇到了同样的问题。我将我的模块开发为CLI,目的是能够从任何地方调用它,将其发布到MPM注册表并使用-g
选项安装它,但是当从命令行调用它时,我仍然得到command not found
错误。将bin
属性添加到package.json
文件就是诀窍。
很多软件包都有一个或多个可以安装到PATH中的可执行文件。 npm使这很简单(事实上,它使用此功能来安装“npm”可执行文件。)
要使用它,请在package.json中提供
bin
字段,该字段是命令名称到本地文件名的映射。在安装时,npm会将该文件符号链接到prefix/bin
以进行全局安装,或者将./node_modules/.bin/
用于本地安装。
这意味着您的package.json
文件应如下所示:
{
"name": "foo-cli",
"version": "1.0.0",
"description": "A CLI to do Foo-ish things.",
"bin": {
"foo": "./cli.js"
},
"main": "main.js",
...
}
如果您只希望指定一个命令,则该属性可以是单个字符串;如果您希望指定多个命令,则该属性可以是地图。现在你应该能够从命令行的任何地方调用foo
。