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

3
我正在尝试将我的第一个模块发布到NPM,它使用EJS模板渲染Markdown,并使用另外两个npm模块marked和ejs,我已经在我的package.json文件中声明了这些依赖项。我有一个.gitignore文件,其中包含我的node_modules目录,还有一个空的.npmignore文件。
我已经成功地发布到了npm。
然而,当我尝试通过将其放入测试应用程序的package.json中并执行npm install -d来安装我的模块时,它会安装,但它不会安装其依赖项。如果我进入测试应用程序根目录下的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存储库链接,这是package.json

编辑: 注意,只有当我在我的测试应用程序中已安装了markedejs依赖项时,才会发生这种情况。然后,当我安装我的模块时,它没有在自己的node_modules目录中安装marked和ejs。但是,如果我从测试应用程序中删除所有模块并仅安装我的模块,则会安装它们。是否有任何方法可以使其无论先前是否安装了我的依赖项都能正常工作。


你能发布 package.json 的内容吗? - Alberto Zaccagni
@AlbertoZaccagni 添加了链接 - Cory Gross
2
我刚刚安装了你的包并安装了所有依赖项... npm 1.2.18 和 node v0.10.6。 - Alberto Zaccagni
显然问题在于我的测试应用程序已经安装了ejs和marked,我以为它会在两个级别都安装,但显然如果它们已经存在,它就根本不会安装依赖项。有没有办法在已经安装了ejs的应用程序中使用依赖于ejs的模块? - Cory Gross
1个回答

2

应该一切“正常工作”。

由于npm看到在更高级别的node_modules目录中已经有了合适的模块,因此不会安装任何新模块。由于node的require将向上查找整个树,尝试为每个目录查找node_modules子目录,因此您模块的require语句将正常工作,而无需自己拥有一个node_modules目录。

如果您将模块安装在没有正确依赖关系的任何位置,则它们将在模块自己的node_modules目录下安装。Alberto确认了这一点。

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


阅读完这篇文章后,我又进行了一些操作,卸载了所有的依赖项,重新安装它们,现在按照你所说的方式运行正常了。不过之前出了什么问题我也不确定,可能是无法引用模块。 - Cory Gross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接