全局安装本地开发的 npm 包

Install a locally developed npm package globally

我正在开发一个需要 运行 来自 shell 的节点包。我知道我必须全局安装包,但是 运行ning

$> npm install -g ./my_module

没有给我想要的结果,就是运行ning

$> my_module

结果

my_module: : command not found

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

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

请尝试打包模块并安装。

npm pack

然后全局安装

npm i -g my_module-0.0.1.tgz

让我知道这是否有效

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

来自NPM documentation:

A lot of packages have one or more executable files that they’d like to install into the PATH. npm makes this pretty easy (in fact, it uses this feature to install the “npm” executable.)

To use this, supply a bin field in your package.json which is a map of command name to local file name. On install, npm will symlink that file into prefix/bin for global installs, or ./node_modules/.bin/ for local installs.

意味着您的 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

设置正确的 package.json 配置后,(主要使用 {"bin": {...}}),您不必将其发布到 NPM 注册表然后再次下载即可看到它的工作。

npm link 正是为这种情况而制作的。如 offical documentation:

中所述

npm link in a package folder will create a symlink in the global folder {prefix}/lib/node_modules/ that links to the package where the npm link command was executed.

假设你有这个项目:

-- my_module

-- -- index.js
-- -- cli.js
-- -- package.json

你有这个 package.json:

{
  "name": "my_module",
  "bin": {
    "my_module": "cli.js"
  },
}

运行:

cd my_module

然后:

npm link

现在 npm 将在您的机器上全局安装您的包。它将检查 package.json 中的 bin 条目,并且它将 link my_modulecli.js 文件。这将通过在当前目录的全局 npm 目录中创建一个 symlink 来实现。

现在,如果您 运行 在命令行中:

my_module

它将指向 cli.js 文件。如果您更改了 cli.js 内容,它将在您下次 运行 my_module 时反映出来,如果您将 my_module 重命名为 my_module2,请使用 npm unlink然后再次npm link


换句话说,npm 可以使用完整的 url 作为包名,它将使用完整的 url 来下载和安装包,而不是查看 npm 注册表,你可以从您自己的私有 Git 主机安装软件包,例如:

npm install -g https://github.com/Me/my_module