umi插件体系

347 阅读2分钟

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

umi是一个非常高效的前端一体化框架,它试图让前端开发者不需要关心技术实现的各种细节,专注于业务功能的实现。为了让书写的业务能最大化的服用,它提供了非常方便的插件机制,可以将很多的技术甚至业务细节封装起来,方便复用。

我们先要了解下什么场景下该使用插件? 当一个功能涉及到前端的各个部分或者构建的不同阶段,我们又希望其它项目能复用该功能,这时候我们就需要考虑使用插件了。

比如我们要实现一个loash按需打包的实现,如果不采用插件,需要:

  1. 安装lodash
  2. 配置中添加babel plugin import插件

如果我们开个一个插件,则只需要安装和配置即可。

我们需要做到以下几点:

  1. 首先初始化一个空的插件
  2. 在插件的主入口文件里,通过函数第一个参数里的webpack配置,调用chainwebpack,从而实现直接操作umi的api的效果,直接改
  3. 利用api暴露的更改webpack的接口,直接改webpack的配置,这样就相当于把原本写到webpack里的东西封装成了一个插件,非常的方便

需要注意的是,最终需要封装为一个npm包

整个umi的执行逻辑可以概括如下:

  1. 开始执行
  2. 创建service对象
  3. 加载.env文件,设置变量
  4. 加载用户配置文件
  5. 设置路径
  6. 设置preset和插件
  7. 执行service.run方法
  8. 获取preset并按顺序执行
  9. 插件注册及其执行
  10. 初始化hook
  11. 获取hook并执行配置
  12. 执行相应的命令

具体的内容,还是有必要上官网看看,学习更为专业的插件开发方案,多看看插件编写案例