全局安装本地开发的npm包

时间:2015-02-10 20:12:54

标签: node.js package npm

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

$> npm install -g ./my_module

没有给我想要的结果,即正在运行

$> my_module

结果

my_module: : command not found

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

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

3 个答案:

答案 0 :(得分:14)

请尝试包装模块并安装。

npm pack

然后在全局范围内安装

npm i -g my_module-0.0.1.tgz

让我知道这是否有效

答案 1 :(得分:2)

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

来自NPM documentation

  

许多软件包都具有一个或多个要安装到PATH中的可执行文件。 npm使此操作非常容易(实际上,它使用此功能来安装“ npm”可执行文件。)

     

要使用此功能,请在package.json中提供一个package.json字段,该字段是命令名到本地文件名的映射。安装时,npm会将文件符号链接到bin进行全局安装,或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", ... }

答案 2 :(得分:0)

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

npm link正是针对这种情况。如offical documentation中所述:

  软件包文件夹中的

npm link将在全局文件夹{prefix} / lib / node_modules /中创建一个符号链接,该链接链接到执行npm link命令的软件包。

假设您有这个项目:

-- my_module

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

您有这个package.json

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

运行:

cd my_module

然后:

npm link

现在npm将在您的计算机中全局安装软件包。它将检查package.json中是否有bin条目,并将my_module链接到cli.js文件。这将通过在全局npm目录中创建到当前目录的符号链接来实现。

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

my_module

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


另外,npm可以使用完整的URL作为软件包名称,它将使用完整的URL下载并安装软件包,而不是查看npm注册表,您可以从自己的私有Git主机安装软件包,例如:

npm link