🚧 基于ECMAScript的插件体系 🚧
我们常说的插件,通常是指在软件中,可以被动态加载和卸载的模块。以VSCode为例,我们可以在VSCode中安装各种插件,如:Vue-Office, ESLint, Prettier
我们想要在Vscode中开发Vue3项目时, VSCode本身并不支持Vue Template语法, 所以我们需要安装Vue-Office插件来支持来扩展编辑器功能。
为什么需要插件体系
Section titled “为什么需要插件体系”首先设计带有插件体系的应用有以下优点:
- 可以动态加载和卸载功能模块
- 可以不修改主程序的代码,就可以扩展主程序的功能
- 可以被设计为共享和复用
但实现插件体系也会让应用变得复杂,需要考虑以下问题:
- 插件体系带来巨大的复杂度和维护成本
- 版本迭代兼容问题
- 插件开发成本和难度
- 插件的性能和稳定性问题
- 插件安全性问题
还有更多问题,这里就不一一列举了. 大多都可以通过设计合理的插件体系来解决. 但会让应用变得更复杂. 所以需要权衡利弊. 是否值得实现插件体系.
插件是一个体系
Section titled “插件是一个体系”我认为的插件最低限度必须具备以下特性:
- 插件可以动态加载和卸载
- 完整的插件开发流程: 脚手架、开发、编译、调试代码
- 一套扩展主程序的API
插件必须能够动态加载和卸载. 否则就失去了插件的意义。不如直接在主程序中实现功能。 而完整的插件开发流程. 是为了保证开发插件的规范和效率。其中调试插件代码. 是最重要的一环。想象一下大家应该不会想通过console.log来调试插件代码。 而一套扩展主程序的API. 是插件与主程序交互的桥梁。是插件实现功能目的入口。
因为插件从开发到使用的各环节都需要应用开发者考虑. 所以我认为插件是一个体系. 而不是一个简单的模块。
基于ECMAScript的标题解释
Section titled “基于ECMAScript的标题解释”作者从初学到现在,一半的工作经历都在为公司设计和开发插件体系,照着VSCode设计。从零到一为公司的低代码产品开发了插件体系。 技术的选型局限与经验、能力、当时的眼界和技术限制,结合公司的资源下,使用了SystemJs、Angular来开发。对于现在来说,这些技术已经不再适合。 ECMAScript已在浏览器中广泛支持,不需要在编译时做特殊处理。也不需要依赖Angular如此重的框架。 插件的实现方式不会只有一种。这次我想顺应时代,基于ECMAScript模块来实现插件体系中的动态加载和卸载。
控制 ECMAScript 模块的加载和卸载
Section titled “控制 ECMAScript 模块的加载和卸载”首先先来一段大家都熟悉的代码:
import { spark } from "./core";
spark();🚧 施工中…