chore(mp-harmony): 修正子包 HAR name 字段 + 纳入元数据到 git
背景:
mp-harmony 项目的 5 个 ascf shared HAR 子包 (components_diy / pages_goods /
pages_order / pages_promotion / pages_tool) 在 ascf_build 目录下, 关键
元数据 (oh-package.json5 / module.json5 / build-profile.json5 /
Index.ets / hvigorfile.ts / obfuscation-rules.txt) 之前被 .gitignore
整体忽略, 从未被 git 跟踪, 导致 "module.name 被清空" 等回归无法被
git diff / blame 追踪。
改动:
1. .gitignore 改造
- 不再整体 ignore ascf_build
- 精确 ignore 已知产物路径 (rawfile/**/*.pack.js / rawfile/**/*.html
/ rawfile/**/*.json / build/ / oh_modules/ / .preview/ / .cxx/
/ .test/ / node_modules/)
- ! 取反保留 HAR 必需文件 (placeholder/index.*, rawfile/index.js,
base/element/*.json)
- 补充 entry / hvigor / 鸿蒙签名材料 / IDE 临时文件 ignore 规则
2. 首次将 5 个 HAR 包的元数据纳入 git (40 个文件)
3. 新增 scripts/fix-subpackage-module-names.js: 任何入口 require
vue.config.js 时自动修复 oh-package.json5.name + module.json5.module.name
双重覆盖, 防止 DevEco ohpm 报 "00604007 Field IS Empty Error" 或
hvigor 报 "Schema validate failed"
4. vue.config.js 顶层 IIFE 触发修复 (任何 require 立即生效, 不依赖
webpack 钩子)
5. entry/scripts/check-har-deps.js 扩展: 校验 ascf_build 子包
module.json5.module.name 字段 (兜底校验)
6. entry/har-deps-required.json5 扩展: 新增 subpackageModuleJson5
路径映射 + ohModulesRoots 校验资源齐备性
7. entry/README-HAR-DEPS.md 更新: 故障速查表新增 module.name 相关
报错条目
预期效果:
- HBuilderX 触发 vue-cli-service build → vue.config.js 自动修复子包
name → DevEco ohpm install / hvigor schema 校验通过
- check-har-deps.js 兜底, 任何回归立即被检测并报错
- 团队成员 git pull 后能立即看到 ascf_build 元数据, 可用 git diff
跟踪 module.name 等关键字段变更
This commit is contained in:
101
vue.config.js
101
vue.config.js
@@ -490,14 +490,115 @@ class VersionInjectPlugin {
|
||||
|
||||
copyDir(sourceDir, destDir);
|
||||
console.log(' ✅ 拷贝完成');
|
||||
|
||||
// 同步修正 ascf_build 下 5 个子包 HAR 的 module.json5.module.name
|
||||
// 原因: 模板里 module.name 经常被写成空串或不正确的值,
|
||||
// 导致鸿蒙构建时 hvigor schema 校验失败 (必须 ^[a-zA-Z][0-9a-zA-Z_.]*$)
|
||||
// 这里强制按包目录名覆盖, 保证产物正确。
|
||||
this._fixSubpackageModuleNames();
|
||||
} catch (e) {
|
||||
console.error(` ❌ 拷贝失败: ${e.message}`);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修正 ascf_build/<pkg>/src/main/module.json5 的 module.name 字段
|
||||
*
|
||||
* 背景:
|
||||
* mp-harmony 项目的子包 HAR (components_diy / pages_goods / pages_order /
|
||||
* pages_promotion / pages_tool) 在 ascf/ascf_build/ 目录下各自有
|
||||
* src/main/module.json5, 其中 module.name 必须等于包名才能通过 hvigor schema。
|
||||
*
|
||||
* 这个 module.json5 是项目源码里维护的模板, 经常因为:
|
||||
* 1. uniapp 鸿蒙编译器输出空 name 字段
|
||||
* 2. 模板里手动写错
|
||||
* 3. 早期版本没这个文件, 后来手工补了一个错误的
|
||||
* 导致 module.name 为空, 鸿蒙构建时 schema 校验失败:
|
||||
* "Schema validate failed, must match pattern ^[a-zA-Z][0-9a-zA-Z_.]*$"
|
||||
*
|
||||
* 修复策略:
|
||||
* 遍历 5 个子包, 用包目录名 (例: pages_tool) 覆盖 module.name,
|
||||
* 确保构建产物始终正确。
|
||||
*
|
||||
* 注意:
|
||||
* - 只覆盖 module.name, 其他字段保留 (deviceTypes / installationFree 等)
|
||||
* - 如果 module.json5 不存在, 会按合理默认值新建一份
|
||||
* - 如需新增/删除子包, 同步更新 SUBPACKAGE_NAMES 数组
|
||||
*/
|
||||
_fixSubpackageModuleNames() {
|
||||
// 委托给模块级 fixSubpackageModuleNames, 行为一致
|
||||
return fixSubpackageModuleNames();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修正 ascf_build/<pkg>/src/main/module.json5 的 module.name 字段
|
||||
*
|
||||
* 实现已抽到独立模块 scripts/fix-subpackage-module-names.js,
|
||||
* 这里仅 require + 转发, 避免 vue-cli-service 校验 module.exports 时报错。
|
||||
*
|
||||
* 背景:
|
||||
* mp-harmony 项目的子包 HAR (components_diy / pages_goods / pages_order /
|
||||
* pages_promotion / pages_tool) 在 ascf/ascf_build/ 目录下各自有
|
||||
* src/main/module.json5, 其中 module.name 必须等于包名才能通过 hvigor schema。
|
||||
*
|
||||
* 这个 module.json5 是项目源码里维护的模板, 经常因为:
|
||||
* 1. 模板里手动写错
|
||||
* 2. 早期版本没这个文件, 后来手工补了一个错误的
|
||||
* 3. 自动化脚本覆盖时丢失 name
|
||||
* 导致 module.name 为空或错误, 鸿蒙构建时 schema 校验失败:
|
||||
* "Schema validate failed, must match pattern ^[a-zA-Z][0-9a-zA-Z_.]*$"
|
||||
*
|
||||
* 使用:
|
||||
* // vue.config.js 内部:
|
||||
* const { fixSubpackageModuleNames } = require('./scripts/fix-subpackage-module-names');
|
||||
* fixSubpackageModuleNames();
|
||||
*
|
||||
* // 独立跑:
|
||||
* node scripts/fix-subpackage-module-names.js
|
||||
*
|
||||
* // CI 兜底校验:
|
||||
* node stub-app-projects/mp-harmony/entry/scripts/check-har-deps.js --strict
|
||||
*/
|
||||
const { fixSubpackageModuleNames } = require('./scripts/fix-subpackage-module-names');
|
||||
|
||||
/**
|
||||
* vue.config.js 顶层副作用: 任何入口 require 本文件时, 自动修正
|
||||
* ascf_build/<pkg>/src/main/module.json5.module.name。
|
||||
*
|
||||
* 工作流覆盖:
|
||||
* - HBuilderX 发行 → vue-cli-service build → require vue.config.js → 触发此钩子
|
||||
* - 命令行 vue-cli-service build → 触发此钩子
|
||||
* - 命令行 node -e "require('./vue.config.js')" → 触发此钩子
|
||||
*
|
||||
* 与 VersionInjectPlugin._copyMpHarmonyBuild 末尾的 _fixSubpackageModuleNames 重复
|
||||
* 但更保险: 哪怕 webpack 钩子因为某些原因没触发, require 这层也会保证修复。
|
||||
*/
|
||||
(function _bootstrapFixSubpackageModuleNames() {
|
||||
// 跳过生产测试门禁期间 (test-gate 会 fail 时, 不希望顺手修复文件)
|
||||
if (process.env.NODE_ENV === 'production' && process.env.UNI_SCRIPT && process.env.__TEST_GATE_BLOCKED__) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// 这里不传 silent, 让所有入口 (包括 HBuilderX / 命令行) 都能在 console 看到修复日志
|
||||
fixSubpackageModuleNames();
|
||||
} catch (e) {
|
||||
console.error('[vue.config] bootstrap fixSubpackageModuleNames 失败:', e.message);
|
||||
}
|
||||
})();
|
||||
|
||||
// 导出配置
|
||||
//
|
||||
// 注意: 不要在这里 export 任何非白名单字段!
|
||||
// vue-cli-service 会校验 vue.config.js 的导出 keys, 不允许出现未识别的字段
|
||||
// (会报 "Invalid options in vue.config.js: \"<field>\" is not allowed")。
|
||||
// 历史教训: 之前把 fixSubpackageModuleNames 放在 module.exports 上, 直接报这个错。
|
||||
// 现在 fixSubpackageModuleNames 仅作为本文件内的顶层函数 + 顶层 IIFE 副作用,
|
||||
// 不再 export。需要外部调用请走:
|
||||
// node scripts/fix-subpackage-module-names.js
|
||||
// 或:
|
||||
// node -e "require('./scripts/fix-subpackage-module-names').fixSubpackageModuleNames()"
|
||||
module.exports = {
|
||||
productionSourceMap: false,
|
||||
configureWebpack: config => {
|
||||
|
||||
Reference in New Issue
Block a user