优化多ExtJS应用程序的构建时长
优化ExtJS模块化单体应用构建时长的方案
针对多应用多主题构建耗时过长的问题,可通过以下方法复用公共资源编译结果,大幅缩减总构建时间:
1. 预构建公共包并跨应用共享
- 单独编译公共包一次,输出到共享目录:
sencha package build common --output-dir ../shared-packages/common - 修改各应用的
app.json,将公共包的引用指向预构建目录,避免重复编译:"packages": { "common": { "location": "../shared-packages/common", "remote": false, "requires": true } }
2. 预构建主题并复用
- 分别编译普通主题和高对比度主题到共享目录:
sencha package build theme-default --output-dir ../shared-themes/default sencha package build theme-high-contrast --output-dir ../shared-themes/high-contrast - 应用构建时直接指定预构建主题,跳过主题编译步骤:
sencha app build production --theme=../shared-themes/high-contrast - 也可在
app.json中配置主题路径,让构建流程自动复用:"theme": { "name": "theme-high-contrast", "location": "../shared-themes/high-contrast" }
3. 整合「保存与恢复集合」到现有构建流程(无需舍弃app.json)
无需完全重写构建流程,只需通过自定义build.xml扩展原生sencha app build:
第一步:保存公共集合
在项目根目录创建或修改build.xml,添加保存公共依赖集合的目标:<project name="shared-build" default="save-common-set"> <import file="${basedir}/.sencha/app/build-impl.xml" /> <target name="save-common-set"> <x-compiler> <!-- 定义公共依赖的编译范围:ExtJS框架、公共包、主题 --> <compilerOptions> <classpath> <path location="${sencha.sdk.dir}/src" /> <path location="../shared-packages/common/src" /> <path location="../shared-themes/default/src" /> </classpath> </compilerOptions> <!-- 将编译结果保存到缓存目录 --> <saveSet dir="${basedir}/build-cache/common-set" /> <compile /> </x-compiler> </target> </project>执行一次保存公共集合:
sencha ant save-common-set第二步:在应用中恢复公共集合
修改各应用的build.xml,添加复用公共集合的构建目标:<project name="app-build" default="build-with-shared"> <import file="${basedir}/.sencha/app/build-impl.xml" /> <target name="build-with-shared" depends="init"> <x-compiler> <!-- 恢复之前保存的公共集合 --> <restoreSet dir="${workspace.dir}/build-cache/common-set" /> <!-- 仅编译当前应用的代码 --> <compilerOptions> <classpath> <path location="${basedir}/src" /> </classpath> </compilerOptions> <compile /> </x-compiler> </target> </project>用这个自定义目标代替原生构建命令:
sencha ant build-with-shared
4. 宏控制多构建的优化
- 将公共宏逻辑抽离到预构建的公共包中,避免每个应用重复处理相同的宏分支。
- 恢复公共集合后,仅针对应用的差异化代码编译不同宏版本,比如:
sencha ant build-with-shared -Dsencha.macro.REGION=EU sencha ant build-with-shared -Dsencha.macro.REGION=US
通过以上方案,ExtJS框架、公共包和主题的编译次数可从原来的10+次降到1次,每个应用仅需编译自身的精简代码,总构建时长会大幅缩短。
内容的提问来源于stack exchange,提问作者Coderino Javarino
相关产品推荐
相关产品推荐

