如何支持node.js命令行实用程序的插件?

如何支持node.js命令行实用程序的插件?,node.js,plugins,npm,Node.js,Plugins,Npm,我正在编写一个实用程序(用Node.js编写),它将从命令行调用。具体细节无关紧要,但功能可以分解为单独的不相关模块,每个模块都可以独立地为最终结果做出贡献 例如,我可以调用: npm install -g myutil #installs modulea and moduleb myutil #invokes said modules 假设存在模块modulea和moduleb。目前,所有这样的模块都作为myutil的依赖项捆绑在一起,但在理想情况下,我

我正在编写一个实用程序(用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
,并像其他任何东西一样使用它。然而,围绕它还有一些问题:

  • 这是个好主意吗
  • 是否有支持的方法来执行此操作?FAQ建议全局模块应该是完全独立的,但我认为这是一个合理的用例
  • 如果根本不支持,还有其他选择吗?例如,我可以想到的一种替代方法是强制用户在每个项目的本地安装额外的模块(但是,这不是一个很好的解决方案)
  • 了解哪些选项有助于解决全局/本地CLI问题。也许你会使用它,但也许你只是为了想法而阅读它。我认为当前的策略是,如果您必须在全局范围内安装某个东西,那么将它变成一个小小的
    myutil
    包装包,它应该只在
    一些用户项目/node\u模块/myutil
    中定位本地包。没有理由全局安装这些插件,因为它们不会直接在命令行上运行,所以应该只在本地安装

    我可以想到的是,强制用户在每个项目的本地安装额外的模块(但是,这不是一个很好的解决方案)


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

    另一个答案并不能真正回答这个问题,因此对于未来的访问者,我将发布我的实际解决方案

    我最终否定了全球安装插件的想法。相反,我将插件与工具捆绑在一起。为了支持自定义插件,我允许用户在本地安装它们


    加载插件的代码与此类似,因此如果您真的想以全局方式安装插件,只需将其放在目录树的更高位置。

    我的问题中省略了一些细节,因为它们并不真正相关。1.这是一个内部工具,对我们构建的站点进行一些基本的编辑检查。2.全球插件的目的是使其易于使用,因为否则没有人会使用它。请您共享一个指向您的工具的链接以供实现参考,好吗?