# 模块化编译

应用模块化编译是指基于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）的方式引用共享库，共享状态。