全局安装本地开发的 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
文件就是诀窍。
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_module
到 cli.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
我正在开发一个需要 运行 来自 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
文件就是诀窍。
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 intoprefix/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_module
到 cli.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