【问题标题】:How to include other NPM modules when publishing to NPM?发布到 NPM 时如何包含其他 NPM 模块?
【发布时间】:2013-05-19 08:09:36
【问题描述】:

我正在尝试将我的第一个模块发布到 NPM,它使用 EJS 模板呈现降价,它使用标记和 ejs 的其他两个 npm 模块,我在我的 package.json 文件中将这些作为依赖项。我有一个包含我的node_modules 目录的.gitignore 文件,还有一个为空的.npmignore 文件。

我已成功发布到 npm。

但是,当我尝试通过将模块放入测试应用程序的 package.json 并执行 npm install -d 来安装模块时,它会安装,但如果我进入测试应用程序根 node_modules,它不会安装其依赖项目录,然后进入我新发布的模块的安装目录,它没有安装任何依赖项,它没有自己的嵌套node_modules 目录。

应该有一种方法可以让我的模块的依赖项正确安装,当我包含 express 作为依赖项时,它会安装自己的 node_modules 文件夹并安装连接和其他模块,我想对另外两个 npm 做同样的事情模块。

我知道如果它会安装其嵌套的 node_modules 依赖项,它会起作用,当我这样做时它会起作用。

$ npm install -d
$ cd node_modules/my_module
$ npm install -d
$ cd ../..
$ node app

编辑:这是我的模块的GitHub repo 的链接,这是package.json

编辑:请注意,只有当我的依赖项标记ejs 已经安装在我的测试应用程序中时,才会发生这种情况。然后当我安装我的模块时,它没有在自己的node_modules 目录中安装标记和 ejs。但是,如果我从测试应用程序中删除所有模块并仅安装我的模块,它将安装它们。不管我的依赖项是否已经预先安装,有没有办法让它工作。

【问题讨论】:

  • 你能发布package.json的内容吗?
  • @AlbertoZaccagni 添加了链接
  • 我刚刚安装了你的包并安装了所有的 deps...npm 1.2.18 和 node v0.10.6
  • 显然问题是我的测试应用程序已经有 ejs 并标记为已安装,我认为它只会安装在两个级别,显然如果它们已经存在,它根本不会安装依赖项。无论如何在已经安装了 ejs 的应用程序中使用我依赖于 ejs 的模块?

标签: node.js npm


【解决方案1】:

它应该按原样“正常工作”。

npm 不会安装任何新模块,因为它会在更高级别的 node_modules 目录中看到已经有适当的模块。因为 node 的 require 会在树中查找,为每个目录尝试 node_modules 子目录,所以你的模块的 require 语句将起作用,而没有自己的 node_modules 目录。

如果您将模块安装在尚未安装正确依赖项的任何地方,它们将安装在模块自己的 node_modules 目录下。 Alberto 证实了这一点。

您可能希望在 package.json 中指定更具体的依赖版本。这将确保您的模块可以使用您测试过的依赖项的版本。

【讨论】:

  • 读完之后,我又搞砸了一些,再次卸载了所有依赖项,安装了它们,它就像你说的那样工作。虽然不知道之前出了什么问题。它无法要求这些模块。
猜你喜欢
  • 1970-01-01
  • 2016-12-24
  • 2017-12-29
  • 2021-04-29
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 2019-09-11
  • 2013-02-09
相关资源
最近更新 更多