我正在构建一个Node模块,其中包含devDependencies,应该全局安装,例如jasmine-node和jshint。我需要的是能够在我的makefile / npm脚本部分引用它们的二进制文件以运行测试、lint等。换句话说,我不希望以编程方式require()它们。
经过搜索后,我仍然对如何处理此事感到困惑:
1)我的第一种方法是假设这些模块将被全局安装,在我的模块文档中澄清这一点,并将它们的二进制文件作为全局引用 - 即期望它们可全局使用。这与以下建议冲突
确保避免引用全局安装的二进制文件。相反,将其指向本地node_modules,该目录会在隐藏的.bin目录中安装二进制文件。确保该模块(在本例中为“mocha”)在您的package.json中的devDependencies下,以便在运行npm install时将二进制文件放置在那里。
(摘自this post)
总的来说,这听起来是正确的,因为上述设置相当脆弱。
2)我的下一步方法是将这些模块明确地包含在devDependencies中(尽管它们仍然全局安装在我的系统上(很可能也是在用户和贡献者的系统上))。这样可以确保在需要时有适当版本的二进制文件,并且现在我可以通过node_modules/.bin/
引用它们。
然而,我现在与这条建议发生了冲突
如果你要require()它,请在本地安装。
(取自npm文档)
尽管如此,我确实注意到npm install
现在实际上不会为全局安装的模块获取任何内容(不显示网络活动)。
我的问题:
- 在 devDependencies 中提到的全局安装模块的本地版本,只是在
npm install
期间复制的全局版本吗? - 2)这样做是正确的方法吗?还是我忽略了其他做法?