Skip to content

🚧 基于ECMAScript的插件体系 🚧

我们常说的插件,通常是指在软件中,可以被动态加载和卸载的模块。以VSCode为例,我们可以在VSCode中安装各种插件,如:Vue-Office, ESLint, Prettier

我们想要在Vscode中开发Vue3项目时, VSCode本身并不支持Vue Template语法, 所以我们需要安装Vue-Office插件来支持来扩展编辑器功能。

首先设计带有插件体系的应用有以下优点:

  1. 可以动态加载和卸载功能模块
  2. 可以不修改主程序的代码,就可以扩展主程序的功能
  3. 可以被设计为共享和复用

但实现插件体系也会让应用变得复杂,需要考虑以下问题:

  1. 插件体系带来巨大的复杂度和维护成本
  2. 版本迭代兼容问题
  3. 插件开发成本和难度
  4. 插件的性能和稳定性问题
  5. 插件安全性问题

还有更多问题,这里就不一一列举了. 大多都可以通过设计合理的插件体系来解决. 但会让应用变得更复杂. 所以需要权衡利弊. 是否值得实现插件体系.

我认为的插件最低限度必须具备以下特性:

  1. 插件可以动态加载和卸载
  2. 完整的插件开发流程: 脚手架、开发、编译、调试代码
  3. 一套扩展主程序的API

插件必须能够动态加载和卸载. 否则就失去了插件的意义。不如直接在主程序中实现功能。 而完整的插件开发流程. 是为了保证开发插件的规范和效率。其中调试插件代码. 是最重要的一环。想象一下大家应该不会想通过console.log来调试插件代码。 而一套扩展主程序的API. 是插件与主程序交互的桥梁。是插件实现功能目的入口。

因为插件从开发到使用的各环节都需要应用开发者考虑. 所以我认为插件是一个体系. 而不是一个简单的模块。

作者从初学到现在,一半的工作经历都在为公司设计和开发插件体系,照着VSCode设计。从零到一为公司的低代码产品开发了插件体系。 技术的选型局限与经验、能力、当时的眼界和技术限制,结合公司的资源下,使用了SystemJs、Angular来开发。对于现在来说,这些技术已经不再适合。 ECMAScript已在浏览器中广泛支持,不需要在编译时做特殊处理。也不需要依赖Angular如此重的框架。 插件的实现方式不会只有一种。这次我想顺应时代,基于ECMAScript模块来实现插件体系中的动态加载和卸载。

控制 ECMAScript 模块的加载和卸载

Section titled “控制 ECMAScript 模块的加载和卸载”

首先先来一段大家都熟悉的代码:

安装依赖…
import { spark } from "./core";
spark();

🚧 施工中…