全局安装本地开发的npm包

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

我正在开发一个需要从shell运行的节点包。我知道我必须全局安装软件包,但正在运行

$> npm install -g ./my_module

没有给我想要的结果,那就是正在运行

$> my_module

结果是

my_module: : command not found

而不是运行我的节点包的入口点(index.js)。

我觉得我在这里遗漏了一些明显的东西,我做错了什么?

node.js package npm
2个回答
10
投票

请尝试打包模块并安装。

npm pack

然后全局安装它

npm i -g my_module-0.0.1.tgz

让我知道这是否有效


2
投票

我最近遇到了同样的问题。我将我的模块开发为CLI,目的是能够从任何地方调用它,将其发布到MPM注册表并使用-g选项安装它,但是当从命令行调用它时,我仍然得到command not found错误。将bin属性添加到package.json文件就是诀窍。

来自NPM documentation

很多软件包都有一个或多个可以安装到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

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