模块桥接与 ABC 后端知识
本文只记录 ModuleSourceFile、genAbc、ModuleMode 到 es2abc 的后端主链;不覆盖上游 AST 转换、cache/sourceMap 生命周期和 reload 数据链。
ESMODULE 主链
genAbc.buildStart
→ initArkProjectConfig / cache / SourceMapGenerator / preload 初始化
genAbc.transform
→ preserveSourceMap / JS lazy import / ModuleSourceFile.newSourceFile
genAbc.beforeBuildEnd + moduleParsed
→ linter、声明、singleFileEmit 等补充检查
genAbc.buildEnd
→ generateModuleAbc → processModuleSourceFiles → ModuleMode
→ filesInfo.txt + npmEntries.txt + modules.cache → es2abc → modules.abc
genAbc.cleanUp
→ 清理跨构建对象
核心身份与边界
| 对象 | 身份 | 常见误用 |
|---|---|---|
ModuleSourceFile |
前置插件输出与后端缓存文件之间的桥 | 当成只由 genAbc 写入的对象 |
ModuleInfo |
单个后端输入的路径、recordName、语言和包元数据 | 直接从源码路径猜 recordName |
| OHM URL / recordName | 由 Rollup meta、工程配置和 src/ark_utils.ts 计算的 Ark 运行时模块身份 |
与 Rollup module id 混用 |
| filesInfo | es2abc 的逐模块编译描述 | 改字段顺序但不验证解析端 |
| npmEntries | 外部包入口映射 | 当成普通模块清单 |
| modules.cache | 后端 cache 文件映射 | 与 transform cache 混为一层 |
| 模式 | 接入 hook | 后端输入 | 典型输出 |
|---|---|---|---|
| ESMODULE | buildEnd / generateModuleAbc() |
ModuleSourceFile、ModuleInfo、三类描述文件 |
modules.abc / widgets.abc |
| JSBUNDLE | generateBundle / generateBundleAbc() |
Rollup bundle 的 JS chunk/asset、临时 JS | bundle 对应 ABC |
filesInfo.txt 的普通源码行是与 es2abc 对接的七字段协议,顺序固定为:
cacheFilePath;recordName;moduleType;sourceFile;packageName;isSharedModule;originSourceLang
bytecode HAR 与 customized HAR 的 ABC 输入使用 ${abcPath};;;;${pkgName}; 特殊行,不得套用普通源码七字段校验。
约束
- recordName 错误必须按 Rollup
moduleInfo.meta/工程配置 →ModuleMode→src/ark_utils.ts→ filesInfo 排查;ModuleSourceFile只用于核对物化后的源码与 cache 路径。 - 禁止调整普通源码行的 filesInfo 七字段顺序,也不得把特殊 HAR 行强制改成七字段;修改描述文件或 es2abc 参数前必须确认消费格式与模式分支。
generateModuleAbc()遇上游 error 或非 ESMODULE 会提前返回;不要把“未生成”直接归因于子进程。compileHar且非 bytecode HAR 等分支可能只生成 sourceMap;判断缺失 ABC 前必须核对配置。- 不要直接编辑 cache 中间文件验证修复;应从生产它的源码和元数据修正。
- ABC 未生成必须按中间源码 →
ModuleSourceFile→ 上游 error/模式 → module list → filesInfo → 子进程顺序定位。
修改前检查
代码和测试
- 代码:
src/fast_build/ark_compiler/rollup-plugin-gen-abc.ts、src/fast_build/ark_compiler/transform.ts、src/fast_build/ark_compiler/generate_module_abc.ts、src/fast_build/ark_compiler/module/module_source_file.ts、src/process_module_files.ts、src/fast_build/ark_compiler/module/module_mode.ts、src/ark_utils.ts - 测试:
test/ark_compiler_ut/module/module_source_file.test.ts、test/ark_compiler_ut/module/module_mode.test.ts、test/ark_compiler_ut/module/module_build_mode.test.ts、test/ark_compiler_ut/module/module_preview_mode.test.ts、test/ark_compiler_ut/module/module_hotfix_mode.test.ts、test/ark_compiler_ut/bundle/bundle_mode.test.ts、test/ark_compiler_ut/ark_utils.test.ts