3

我正在尝试将我的第一个模块发布到 NPM,它使用 EJS 模板呈现降价,它使用标记和 ejs 的其他两个 npm 模块,我将这些作为我的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 存储库的链接,这里是package.json

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

4

1 回答 1

2

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

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

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

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

于 2013-05-19T00:09:36.810 回答