微模块
微应用的更小粒度,通常是一个模块或页面,跟页面路由无关,可以随处挂载,也会出现多个微模块同时渲染运行。
#
通过脚手架创建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
作为依赖信息。