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