如何在发布到NPM时包含其他NPM模块?

时间:2013-05-18 21:12:18

标签: node.js npm

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

我已成功发布到npm。

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

应该有办法让我的模块的依赖项安装正确,当我将express包含为依赖项时,它会安装自己的node_modules文件夹,其中安装了connect和其他模块,我想和其他两个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。但是,如果我从测试应用程序中删除所有模块并仅安装我的模块,它将安装它们。无论如何,无论我的依赖项是否已经预先安装,它都可以使它工作。

1 个答案:

答案 0 :(得分:1)

它应该都是“正常工作”。

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

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

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