鸿蒙 的模块化编译

鸿蒙 的模块化编译

鸿蒙开发中,模块化编译是基于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代码,禁止引用工程外代码。