node.js - 发布到NPM时如何包含其他NPM模块?

标签 node.js npm

我正在尝试将我的第一个模块发布到 NPM,它使用 EJS 模板呈现 markdown,它使用另外两个标记的 npm 模块和 ejs,我将它们作为依赖项放在我的 package.json 文件中。我有一个 .gitignore 文件,其中包含我的 node_modules 目录,还有一个空的 .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。但是,如果我从测试应用程序中删除所有模块并仅安装我的模块,它将安装它们。无论我的依赖项是否已预先安装,是否都可以使其正常工作。

最佳答案

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

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

如果您将模块安装在尚未安装正确依赖项的任何位置,则它们将安装在模块自己的 node_modules 目录下。阿尔贝托证实了这一点。

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

关于node.js - 发布到NPM时如何包含其他NPM模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16629002/

相关文章:

node.js - 将来自 resemble.js 的缓冲区响应写入文件

node.js - NPM 依赖于计算机的操作系统吗?

node.js - 使用 npm 链接符号链接(symbolic link) react 模块以进行本地开发会产生错误

node.js - JSON 中视频长度位置 0 处出现意外标记 G

node.js - 在 Angular 中 POST 时表单数据是正确的,但 req.body 在 Node 中是空的?

python - npm - "Can' t 找到 Python 可执行文件 "python",您可以设置 PYTHON 环境变量。”

javascript - 在 Node.js 中编写单元测试的最佳方法是什么?

javascript - 在 if 语句中使用 child_process.exec 的返回值?

node.js - 使用 require 加载 GoCardless SDK 不起作用

node.js - npm install -g 中的 -g 标志是什么意思