我正在编写一个实用程序(用 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
并像其他东西一样使用它。但是,也存在一些问题:
- 这是个好主意吗?
- 有支持的方法吗?常见问题解答建议全局模块应该完全独立,但我认为这是一个合理的用例。
- 如果根本不支持,是否有其他替代方案?例如,我能想到的一种替代方案是强制用户在每个项目本地安装额外的模块(但是,在我看来,这不是一个很好的解决方案)。
最佳答案
看看liftoff这可以帮助解决全局/本地 CLI 问题。也许您会使用它,但也许您只是阅读它来获取想法。我认为当前的策略是,如果您必须全局安装某些东西,请将其只是一个微小的 myutil 包装器包,该包装器包应该只在 some-users-project/node_modules/myutil 中定位本地包。没有理由在全局安装插件,因为它们不会直接在命令行上运行,因此这些插件应该只在本地安装。
I could think of is to force the user to install the extra modules locally per project (but, that's not a great solution IMO).
我的观点是,npm -g
通常是一个糟糕的主意。令人遗憾的是人们无法调整 PATH 环境变量或设置 shell 别名,但我可以理解为什么你想全局安装 myutil
。想要全局安装所有插件可能是错误的。但这具体取决于 myutil 的作用以及它与使用它的项目的耦合程度。从我的角度来看,我希望一切都是本地的,包括 Node 本身。我希望我的项目独立。我不想更新项目 A 的 myutil
并导致项目 B 中断作为副作用。
关于node.js - 如何支持 Node.js 命令行实用程序的插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411580/