应用模块化编译是指基于ESModule的Bundleless编译模式,使用原生ES Module规则构建源码。API 10及以上版本的Stage工程默认开启模块化编译,可有效缩短增量编译时间、减小编译后的包体积。
当前已知模块化编译如果存在re-export语法、引用了没有对应声明文件 (.d.ts) 的 native 文件 (.so)、使用export * from 'x.js’导出js文件中的符号等情况将导致工程报错
说明
FA 模板创建的工程依然使用基于bundle打包的构建方式。
模块化编译解决了Bundle编译打包模式引入的如下问题:
- 同一个模块多次引用导致的重复打包及运行时加载,运行状态无法共享,单例模式运行异常;
- 修改单个模块文件,需要完整重新编译打包,耗时过长;
- 全局变量污染问题。
模块化编译模式有以下价值:
- 修改单个模块代码无需整包编译构建,增量编译构建时间极大减少;
- 基于ESModule规则,模块缓存利用率高,模块内变量变化能够及时反映到模块本身,动态实时绑定;
- 解决了单例问题;
- 减少了包的ROM size;
- 解决了变量污染等问题,各模块基于接口进行开发,提升开发效率。
使用规格约束
- 支持工程内hap引用同工程下其他hap代码,但不推荐使用此引用方式,建议使用har包方式组织公共代码并引用;
- 支持工程内hap通过配置文件(oh-package.json5)使用ohpm包管理的方式引用同工程下其他hap代码,不推荐使用此引用方式,建议使用har包方式组织公共代码并引用;
- 不支持引用工程外的代码以及工程内任意创建目录下的代码,否则工程编译报错;
- 推荐使用hap通过har(static library)的方式引用公共代码;
- 推荐使用hap通过hsp(shared library)的方式引用共享库,共享状态。