如何开发一个插件系统

158 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

现在,很多系统通过插件实现技术项目的可扩展。我们如果也想要开发一个插件系统,该怎么搞?

我们可以参考下现有插件系统的实现,首先看看vue-cli的插件系统。 它的插件主要提供了如下功能:

  1. 修改webpack配置,这个可以通过暴露webpack配置实例去实现
  2. 添加命令,这个也比较简单
  3. 扩展package.json,安装点依赖啥的
  4. 项目中创建/修改文件

开发插件体系前,我们需要想好,我们都要提供哪几个方面的能力?常见的有:

  1. 参与到编译时的能力
  2. 参与到运行时的能力

编译的时候,我们可以给整个项目提供更为丰富的可能性,利用webpack 提供底层的能力支持。运行时,我们可以修改代码的实际运行效果。 但是这里需要额外注意,运行时的话,我们该如何设计整个运行时系统,来保证运行时插件代码及时生效。

编译时的能力和运行时的能力,这些umi都可以支持,但是umi的插件有个比较大的问题,过分依赖于编译时的注入,没有提供运行时的动态注入方案,依然不够灵活。我们希望的是有一套能够运行时支持运行时,编译时影响编译时的方案。

所以我们的插件就应该是包含两部分,一部分是umi支持的编译时加载的插件,另外一套就是我们自己涉及的运行时的插件系统,提供运行时倒入及加载的功能。

运行时部分,主要的内容就是注册一些回调函数挂载点,然后在项目初始化的时候声明一些函数,执行到挂载点的时候再调用对应的挂载函数。