微模块
微应用的更小粒度,通常是一个模块或页面,跟页面路由无关,可以随处挂载,也会出现多个微模块同时渲染运行。
通过脚手架创建#
tip
如果是阿里内部的同学,参考文档 微模块开发接入 DEF
模块开发#
模块目录#
模块入口#
模块入口文件为 src/index.js 。
模块配置#
模块开发工程需要在 build.json 中引入 build-plugin-component 和 build-plugin-stark-module 。
build-plugin-component 配置请参考 组件工程配置。 build-plugin-stark-module 的工程配置如下:
outputDir#
构建结果目录。
- 类型: String
- 默认值: 'dist'
modules#
配置多微模块入口。正常情况下,插件默认使用 src/index.js 作为微模块入口。
- 类型: object
- 默认值: {}
如上配置后,会在构建目录打包两个微模块资源。
moduleExternals#
构建时移除三方依赖。详见 使用进阶 - 性能优化 小节。
- 类型:object
- 默认值: {}
filenameStrategy#
默认情况,所有模块构建资源会平铺在构建目录下。通过该配置,可自定义产物目录结构,比如:
上述配置会将产物构建值 build/modules 目录下,文件名为 ModuleA.js 、ModuleB.js。
已有项目改造为微模块#
将已有项目改造为微模块的方式与 微应用 类似,主要包含两步:
1. 应用入口导出生命周期函数#
下面是 React 模块的导出方式:
下面是 Vue 2.x 模块导出的方式:
2. 将模块构建为 UMD 产物#
以 webpack 工程为例:
如何使用#
React 项目中使用#
在 React 项目中使用微模块,我们推荐使用 <MicroModule /> 组件快速接入。
也可以通过 mountModule/unmountModule 等 API 的方式接入。
Vue 项目中使用#
Vue 项目中需要使用 mountModule/unmountModule 的方式接入。
使用进阶#
微模块中心化注册#
如果需要前置中心化注册微模块,可以使用 registerModules 方法。
自定义生命周期#
可以在微模块不导出 mount 和 unmount 的情况下,自定义生命周期。
值得注意的是,若微模块导出了生命周期,其优先级高于自定义生命周期。
注册本地模块#
在一些场景下,需要支持直接渲染内建模块,可以通过 render 属性直接渲染一个本地模块。
性能优化#
通常情况下,为了减少模块体积,希望抽离一些公共的三方库。
首先,微模块需要在构建时移除依赖的三方库。
然后,在应用项目中,声明微模块的依赖。
如果使用官方 build-plugin-stark-module 插件来构建的微模块,只需要在 build.json 中配置:
该插件会将三方依赖从模块中移除,并在产物目录生成一份依赖信息 runtime.json,模块发布时,需要将 runtime.json 一起发布。这样,在应用项目中,可以使用 runtime.json 作为依赖信息。