![]()
鸿蒙开发中,模块化编译是基于ES Module的Bundleless编译模式。API 10及以上版本的Stage工程默认开启模块化编译,可有效缩短增量编译时间、减小编译后的包体积。
一、模块化编译
模块化编译是指基于ES Module的Bundleless编译模式,使用原生ES Module规则构建源码。
| 版本要求 | 说明 |
|---|
| API 10及以上 | Stage工程默认开启模块化编译 |
| FA模板 | 依然使用基于bundle打包的构建方式 |
二、解决的问题
模块化编译解决了Bundle编译打包模式引入的问题:
| 问题 | 说明 |
|---|
| 重复打包与运行时加载 | 同一个模块多次引用导致重复打包,运行状态无法共享,单例模式运行异常 |
| 编译耗时过长 | 修改单个模块文件需要完整重新编译打包 |
| 全局变量污染 | 传统打包模式存在全局变量污染问题 |
三、核心价值
| 价值 | 说明 |
|---|
| 增量编译时间极大减少 | 修改单个模块代码无需整包编译构建 |
| 模块缓存利用率高 | 基于ESModule规则,模块内变量变化能及时反映到模块本身,动态实时绑定 |
| 解决单例问题 | 模块间状态共享正常 |
| 减少ROM size | 包的体积减小 |
| 提升开发效率 | 各模块基于接口开发,解决变量污染等问题 |
四、其他
| 规格 | 说明 | 推荐度 |
|---|
| hap引用同工程下其他hap代码 | 支持但不推荐 | 不推荐 |
| hap通过oh-package.json5引用同工程下其他hap代码 | 支持但不推荐 | 不推荐 |
| 引用工程外代码或工程内任意创建目录下代码 | 不支持,编译报错 | 禁止 |
| hap通过har(static library)引用公共代码 | 推荐 | 推荐 |
| hap通过hsp(shared library)引用共享库 | 推荐,共享状态 | 推荐 |
推荐方式
推荐使用har(静态库)组织公共代码并引用 ↓ 或使用hsp(共享库)引用共享库,实现状态共享
不推荐方式
hap引用同工程下其他hap代码 → 不推荐 ↓ hap通过oh-package.json5引用同工程下其他hap代码 → 不推荐
五、核心点
| 要点 | 说明 |
|---|
| 开启条件 | API 10及以上Stage工程默认开启 |
| 对比对象 | Bundle打包模式(FA模板仍使用) |
| 核心机制 | 基于ES Module的Bundleless编译 |
| 引用方式 | har(静态库)或 hsp(共享库) |
引用方式对比
| 方式 | 适用场景 | 特点 |
|---|
| har(静态库) | 公共代码组织 | 代码被编译到引用方 |
| hsp(共享库) | 共享库 | 状态共享,独立打包 |
鸿蒙API 10+ Stage工程默认开启基于ES Module的模块化编译(Bundleless),解决重复打包、编译耗时长、全局变量污染问题,推荐使用har(静态库)或hsp(共享库)组织公共代码,不推荐hap引用同工程下其他hap代码,禁止引用工程外代码。