我正在编写一个实用程序(用Node.js编写),它将从命令行调用。细节无关紧要,但是功能可以分解为独立的不相关模块,每个模块都可以独立地为最终结果做出贡献。

例如,我可以调用:

npm install -g myutil   #installs modulea and moduleb
myutil                  #invokes said modules


假设存在模块moduleamoduleb。当前,所有这些模块都捆绑为myutil的依赖项,但是在理想情况下,我想将它们拆分出来并分别安装,以允许其他人编写模块

npm install -g myutil-contrib-modulec


然后在运行时检测myutil-contrib-modulec并像其他所有东西一样使用它。但是,围绕它存在一些问题:


这是一个好主意吗?
有支持的方法吗?常见问题解答建议全局模块应该完全独立,但是我认为这是一个合理的用例。
如果根本不支持它,还有其他选择吗?例如,我可以想到的一种替代方法是强制用户在每个项目中本地安装额外的模块(但这不是IMO的好解决方案)。

最佳答案

看一下liftoff可以帮助解决全局/本地CLI问题。也许您使用了它,但是也许您只是阅读它以获取想法。我认为当前的策略是,如果您必须在全局范围内安装某些东西,则使其成为一个很小的myutil包装程序包,该程序包应将本地程序放在some-users-project/node_modules/myutil中。没有必要在全球范围内安装插件,因为它们不会直接在命令行上运行,因此这些插件只能在本地运行。


  我可以想到的是迫使用户在每个项目中本地安装额外的模块(但是,IMO并不是一个很好的解决方案)。


我的观点是npm -g通常是一个糟糕的主意。令人遗憾的是,人们无法调整PATH环境变量或设置shell别名,但是我可以理解为什么要全局安装myutil。想要在全球范围内安装所有插件可能被误导了。但是完全取决于myutil的功能以及它与使用它的项目之间的耦合程度如何。从我的角度来看,我希望所有内容都在本地,包括节点本身。我希望我的项目独立。我不想为项目A更新myutil并让项目B中断作为副作用。

09-18 15:26