应用模块化编译是指基于ES Module的Bundleless编译模式，使用原生ES Module规则构建源码。API 10及以上版本的Stage工程默认开启模块化编译，可有效缩短增量编译时间、减小编译后的包体积。

说明

FA 模板创建的工程依然使用基于bundle打包的构建方式。

模块化编译解决了Bundle编译打包模式引入的如下问题：

* 同一个模块多次引用导致的重复打包及运行时加载，运行状态无法共享，单例模式运行异常；
* 修改单个模块文件，需要完整重新编译打包，耗时过长；
* 全局变量污染问题。

模块化编译模式有以下价值：

* 修改单个模块代码无需整包编译构建，增量编译构建时间极大减少；
* 基于ESModule规则，模块缓存利用率高，模块内变量变化能够及时反映到模块本身，动态实时绑定；
* 解决了单例问题；
* 减少了包的ROM size；
* 解决了变量污染等问题，各模块基于接口进行开发，提升开发效率。

## 使用规格约束

* 支持工程内hap引用同工程下其他hap代码，但不推荐使用此引用方式，建议使用har包方式组织公共代码并引用；
* 支持工程内hap通过配置文件（oh-package.json5）使用ohpm包管理的方式引用同工程下其他hap代码，不推荐使用此引用方式，建议使用har包方式组织公共代码并引用；
* 不支持引用工程外的代码以及工程内任意创建目录下的代码，否则工程编译报错；
* 推荐使用hap通过har（static library）的方式引用公共代码；
* 推荐使用hap通过hsp（shared library）的方式引用共享库，共享状态。