我正在编写一个实用程序(用Node.js编写),它将从命令行调用。具体细节并不重要,但功能可以分解为单独的无关模块,每个模块都可以独立地为最终结果做出贡献。
例如,我可以调用:
npm install -g myutil #installs modulea and moduleb
myutil #invokes said modules
假设存在模块modulea
和moduleb
。目前,所有这些模块都捆绑为myutil
的依赖关系,但在理想的世界中,我想将它们分开并让它们分开安装,允许其他人编写模块
npm install -g myutil-contrib-modulec
然后在运行时检测myutil-contrib-modulec
并像其他一样使用它。但是,围绕它存在一些问题:
答案 0 :(得分:0)
查看可以帮助解决全局/本地CLI问题的liftoff。也许你使用它,但也许你只是阅读它的想法。我认为当前的策略是如果你必须在全局安装一些东西,只需要一个小的myutil
包装器包,它应该只在some-users-project/node_modules/myutil
内找到本地包。没有理由将插件全局安装,因为它们不能直接在命令行上运行,因此这些插件只能在本地安装。
我能想到的是强迫用户在每个项目中本地安装额外的模块(但是,这不是一个很好的解决方案IMO)。
我的观点是npm -g
通常是一个糟糕的主意。很遗憾人们无法调整他们的PATH环境变量或设置shell别名,但我可以理解为什么要在全局安装myutil
。想要全局安装的所有插件可能都是错误的。但这取决于myutil
究竟是什么以及它与正在使用它的项目的强烈耦合。从我的角度来看,我希望一切都是本地的,包括节点本身。我希望我的项目独立。我不想更新项目A的myutil
,并将项目B作为副作用进行更新。
答案 1 :(得分:0)
另一个答案并没有真正回答这个问题,所以对于未来的访问者,我会发布我的实际解决方案。
我最终修改了全局安装的插件创意。相反,我将插件与工具捆绑在一起。为了支持自定义插件,我允许用户在本地安装它们。
加载插件的代码遵循类似的rules as node itself,所以如果你真的想以全局方式安装插件,只需将它放在目录树的更高位置。