expo-harmony-toolkit 1.9.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/build/cli.js +1 -0
- package/build/commands/buildHap.d.ts +1 -0
- package/build/commands/buildHap.js +1 -0
- package/build/core/build.d.ts +2 -0
- package/build/core/build.js +45 -36
- package/build/core/constants.d.ts +1 -1
- package/build/core/constants.js +1 -1
- package/build/data/publicDocs.d.ts +1 -1
- package/docs/cli-build.md +22 -1
- package/docs/roadmap.md +24 -3
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<p>
|
|
10
10
|
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
|
|
11
11
|
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
|
|
12
|
-
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.9.
|
|
12
|
+
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.9.1-111827?style=flat-square"></a>
|
|
13
13
|
<a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
|
|
14
14
|
<img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG%20%2B%20bare%20intake-059669?style=flat-square">
|
|
15
15
|
</p>
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
> [!IMPORTANT]
|
|
27
|
-
> `v1.9.
|
|
27
|
+
> `v1.9.1` keeps the `v1.9.0` bare workflow intake, app foundation modules, and `react-native-gesture-handler` formal slice, and adds a local HAR normalize opt-out for `build-hap`. The public promise remains tighter: `latest` only carries fully accepted `verified` capabilities, while `next` is reserved for preview fast-track work. The expanded goal still does not widen the current `verified` boundary yet.
|
|
28
28
|
|
|
29
29
|
> [!TIP]
|
|
30
30
|
> The two validated `@react-native-oh-tpl/*` adapters in the public matrix are currently consumed via exact Git URLs and commits. For repository development and the official UI-stack sample, prefer `pnpm install --ignore-scripts` so adapter prepare hooks do not fail on private upstream resources.
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
<!-- GENERATED:readme-current-status:start -->
|
|
49
49
|
| Item | Status |
|
|
50
50
|
| --- | --- |
|
|
51
|
-
| Current version | `v1.9.
|
|
51
|
+
| Current version | `v1.9.1` |
|
|
52
52
|
| Support model | `verified + preview + experimental` |
|
|
53
53
|
| Public `verified` matrix | `expo55-rnoh082-ui-stack` |
|
|
54
54
|
| Supported input | Managed/CNG Expo projects; bare workflow intake baseline |
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<p>
|
|
10
10
|
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
|
|
11
11
|
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
|
|
12
|
-
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.9.
|
|
12
|
+
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.9.1-111827?style=flat-square"></a>
|
|
13
13
|
<a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
|
|
14
14
|
<img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG%20%2B%20bare%20intake-059669?style=flat-square">
|
|
15
15
|
</p>
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
> [!IMPORTANT]
|
|
27
|
-
> `v1.9.
|
|
27
|
+
> `v1.9.1` 延续 `v1.9.0` 的 bare workflow intake、app foundation modules 与 `react-native-gesture-handler` formal slice,并为 `build-hap` 增加本地 HAR normalize opt-out。当前公开承诺仍然收紧为:`latest` 只承诺完整验收的 `verified` 能力,`next` 用于 preview fast track。目标扩大不等于当前 `verified` 边界已经放宽。
|
|
28
28
|
|
|
29
29
|
> [!TIP]
|
|
30
30
|
> 由于当前公开矩阵内的两套 `@react-native-oh-tpl/*` adapter 依赖以 Git URL + exact commit 形式接入,仓库开发和官方 UI-stack sample 推荐使用 `pnpm install --ignore-scripts`,避免 Git adapter 在 prepare 阶段拉取私有资源而中断安装。
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
<!-- GENERATED:readme-current-status:start -->
|
|
49
49
|
| 项目 | 说明 |
|
|
50
50
|
| --- | --- |
|
|
51
|
-
| 当前版本 | `v1.9.
|
|
51
|
+
| 当前版本 | `v1.9.1` |
|
|
52
52
|
| 支持模型 | `verified + preview + experimental` |
|
|
53
53
|
| 唯一 `verified` 公开矩阵 | `expo55-rnoh082-ui-stack` |
|
|
54
54
|
| 输入范围 | Managed/CNG Expo 项目;bare workflow intake baseline |
|
package/build/cli.js
CHANGED
|
@@ -40,6 +40,7 @@ async function run(argv = process.argv) {
|
|
|
40
40
|
.description('Build a Harmony HAP from the validated sidecar and bundle outputs')
|
|
41
41
|
.option('-p, --project-root <path>', 'path to the Expo project')
|
|
42
42
|
.option('--mode <mode>', 'build mode: debug or release', 'debug')
|
|
43
|
+
.option('--no-har-normalize', 'let ohpm consume file:*.har dependencies without extracting local HARs')
|
|
43
44
|
.action(buildHap_1.runBuildHapCommand);
|
|
44
45
|
program
|
|
45
46
|
.command('init')
|
|
@@ -17,6 +17,7 @@ async function runBuildHapCommand(options) {
|
|
|
17
17
|
}
|
|
18
18
|
const report = await (0, build_1.buildHapProject)(projectRoot, {
|
|
19
19
|
mode,
|
|
20
|
+
skipHarNormalize: options.harNormalize === false,
|
|
20
21
|
});
|
|
21
22
|
await (0, metadata_1.writeBuildReport)(projectRoot, report);
|
|
22
23
|
if (report.status === 'failed') {
|
package/build/core/build.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { BuildReport } from '../types';
|
|
|
2
2
|
import type { CommandRunner } from './build/commands';
|
|
3
3
|
export type { CommandRunner, CommandRunnerResult } from './build/commands';
|
|
4
4
|
export { renderBuildReport } from './build/reporting';
|
|
5
|
+
export declare const SKIP_HAR_NORMALIZE_WARNING = "Local HAR normalization is disabled; ohpm will consume file:*.har dependencies directly and normalized build-profile/RNOH compatibility steps will be skipped.";
|
|
5
6
|
interface BundleProjectOptions {
|
|
6
7
|
env?: NodeJS.ProcessEnv;
|
|
7
8
|
runner?: CommandRunner;
|
|
@@ -11,6 +12,7 @@ interface BuildHapProjectOptions {
|
|
|
11
12
|
mode: 'debug' | 'release';
|
|
12
13
|
env?: NodeJS.ProcessEnv;
|
|
13
14
|
runner?: CommandRunner;
|
|
15
|
+
skipHarNormalize?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export declare function bundleProject(projectRoot: string, options?: BundleProjectOptions): Promise<BuildReport>;
|
|
16
18
|
export declare function buildHapProject(projectRoot: string, options: BuildHapProjectOptions): Promise<BuildReport>;
|
package/build/core/build.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.renderBuildReport = void 0;
|
|
6
|
+
exports.SKIP_HAR_NORMALIZE_WARNING = exports.renderBuildReport = void 0;
|
|
7
7
|
exports.bundleProject = bundleProject;
|
|
8
8
|
exports.buildHapProject = buildHapProject;
|
|
9
9
|
exports.getDesiredHarmonyScripts = getDesiredHarmonyScripts;
|
|
@@ -20,6 +20,7 @@ const reporting_1 = require("./build/reporting");
|
|
|
20
20
|
const rnohCompatibility_1 = require("./build/rnohCompatibility");
|
|
21
21
|
var reporting_2 = require("./build/reporting");
|
|
22
22
|
Object.defineProperty(exports, "renderBuildReport", { enumerable: true, get: function () { return reporting_2.renderBuildReport; } });
|
|
23
|
+
exports.SKIP_HAR_NORMALIZE_WARNING = 'Local HAR normalization is disabled; ohpm will consume file:*.har dependencies directly and normalized build-profile/RNOH compatibility steps will be skipped.';
|
|
23
24
|
async function bundleProject(projectRoot, options = {}) {
|
|
24
25
|
const runtimeEnv = options.env ?? process.env;
|
|
25
26
|
const runCommand = options.runner ?? commands_1.defaultCommandRunner;
|
|
@@ -193,6 +194,7 @@ async function bundleProject(projectRoot, options = {}) {
|
|
|
193
194
|
async function buildHapProject(projectRoot, options) {
|
|
194
195
|
const runtimeEnv = options.env ?? process.env;
|
|
195
196
|
const runCommand = options.runner ?? commands_1.defaultCommandRunner;
|
|
197
|
+
const skipHarNormalize = options.skipHarNormalize === true || runtimeEnv.EXPO_HARMONY_SKIP_HAR_NORMALIZE === '1';
|
|
196
198
|
const loadedProject = await (0, project_1.loadProject)(projectRoot);
|
|
197
199
|
const envReport = await (0, env_1.buildEnvReport)(loadedProject.projectRoot, {
|
|
198
200
|
env: runtimeEnv,
|
|
@@ -202,6 +204,9 @@ async function buildHapProject(projectRoot, options) {
|
|
|
202
204
|
...envReport.warnings.filter((warning) => !warning.startsWith('Harmony sidecar files are not present yet.')),
|
|
203
205
|
...relevantEnvAdvisories.map((issue) => `${issue.code}: ${issue.message}`),
|
|
204
206
|
];
|
|
207
|
+
if (skipHarNormalize) {
|
|
208
|
+
warnings.push(exports.SKIP_HAR_NORMALIZE_WARNING);
|
|
209
|
+
}
|
|
205
210
|
const blockingIssues = [];
|
|
206
211
|
if (!envReport.hvigorPath) {
|
|
207
212
|
blockingIssues.push({
|
|
@@ -286,39 +291,41 @@ async function buildHapProject(projectRoot, options) {
|
|
|
286
291
|
let restoreNormalizedRnohCliAutolinkingTemplates = async () => { };
|
|
287
292
|
let restoreNormalizedRnohCodegenAlignment = async () => { };
|
|
288
293
|
let restoreNormalizedHarmonyPackageJsons = async () => { };
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
294
|
+
if (!skipHarNormalize) {
|
|
295
|
+
try {
|
|
296
|
+
const normalizedLocalHarDependencies = await (0, localHar_1.normalizeLocalHarDependencies)(harmonyProjectRoot);
|
|
297
|
+
normalizedLocalHarPackages = normalizedLocalHarDependencies.packages;
|
|
298
|
+
restoreNormalizedDependencies = normalizedLocalHarDependencies.restore;
|
|
299
|
+
restoreNormalizedLocalHarModules = await (0, localHar_1.ensureHarmonyBuildProfileSupportsNormalizedLocalDeps)(harmonyProjectRoot, normalizedLocalHarDependencies.packages);
|
|
300
|
+
restoreNormalizedRnohCliAutolinkingTemplates =
|
|
301
|
+
await (0, rnohCompatibility_1.normalizeProjectRnohCliAutolinkingTemplates)(loadedProject.projectRoot);
|
|
302
|
+
restoreNormalizedHarmonyPackageJsons =
|
|
303
|
+
await (0, autolinking_1.normalizeKnownHarmonyPackageJsons)(loadedProject.projectRoot);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
307
|
+
return (0, reporting_1.createBuildReport)({
|
|
308
|
+
projectRoot: loadedProject.projectRoot,
|
|
309
|
+
command: 'build-hap',
|
|
310
|
+
mode: options.mode,
|
|
311
|
+
status: 'failed',
|
|
312
|
+
harmonyProjectRoot,
|
|
313
|
+
entryFile: bundleReport.entryFile,
|
|
314
|
+
bundleOutputPath: bundleReport.bundleOutputPath,
|
|
315
|
+
assetsDestPath: bundleReport.assetsDestPath,
|
|
316
|
+
artifactPaths: [],
|
|
317
|
+
blockingIssues: [
|
|
318
|
+
{
|
|
319
|
+
code: 'build.hap.failed',
|
|
320
|
+
message,
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
warnings: [...warnings, ...bundleReport.warnings],
|
|
324
|
+
steps,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
restoreNormalizedRnohCodegenAlignment = await (0, localHar_1.alignRnohCodegenWithNormalizedLocalPackage)(harmonyProjectRoot, normalizedLocalHarPackages);
|
|
320
328
|
}
|
|
321
|
-
restoreNormalizedRnohCodegenAlignment = await (0, localHar_1.alignRnohCodegenWithNormalizedLocalPackage)(harmonyProjectRoot, normalizedLocalHarPackages);
|
|
322
329
|
const ohpmCommand = (0, commands_1.buildInvocation)(envReport.ohpmPath, ['install', '--all']);
|
|
323
330
|
try {
|
|
324
331
|
const ohpmResult = await runCommand(ohpmCommand.file, ohpmCommand.args, {
|
|
@@ -349,10 +356,12 @@ async function buildHapProject(projectRoot, options) {
|
|
|
349
356
|
steps,
|
|
350
357
|
});
|
|
351
358
|
}
|
|
352
|
-
if (!
|
|
353
|
-
|
|
359
|
+
if (!skipHarNormalize) {
|
|
360
|
+
if (!normalizedLocalHarPackages.some((localPackage) => localPackage.packageName === '@rnoh/react-native-openharmony')) {
|
|
361
|
+
await (0, localHar_1.ensureRnohGeneratedTsShim)(harmonyProjectRoot);
|
|
362
|
+
}
|
|
363
|
+
await (0, localHar_1.patchRnohGeneratedCodegenForNormalizedLocalPackage)(harmonyProjectRoot);
|
|
354
364
|
}
|
|
355
|
-
await (0, localHar_1.patchRnohGeneratedCodegenForNormalizedLocalPackage)(harmonyProjectRoot);
|
|
356
365
|
await (0, localHar_1.patchKnownHarmonyAdapterCodegenOutputs)(harmonyProjectRoot);
|
|
357
366
|
const hvigorCommand = (0, commands_1.buildInvocation)(envReport.hvigorPath, [
|
|
358
367
|
'assembleHap',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const TOOLKIT_PACKAGE_NAME = "expo-harmony-toolkit";
|
|
2
2
|
export declare const CLI_NAME = "expo-harmony";
|
|
3
|
-
export declare const TOOLKIT_VERSION = "1.9.
|
|
3
|
+
export declare const TOOLKIT_VERSION = "1.9.1";
|
|
4
4
|
export declare const TEMPLATE_VERSION = "rnoh-0.82.29";
|
|
5
5
|
export declare const RNOH_VERSION = "0.82.29";
|
|
6
6
|
export declare const RNOH_CLI_VERSION = "0.82.29";
|
package/build/core/constants.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DESIRED_PACKAGE_SCRIPTS = exports.HARMONY_RUNTIME_PRELUDE_RELATIVE_PATH = exports.HARMONY_ROUTER_ENTRY_FILENAME = exports.STRICT_ENV_EXIT_CODE = exports.STRICT_DOCTOR_EXIT_CODE = exports.DEFAULT_HVIGOR_PLUGIN_FILENAME = exports.PREBUILD_METADATA_FILENAME = exports.TOOLKIT_CONFIG_FILENAME = exports.BUILD_REPORT_FILENAME = exports.ENV_REPORT_FILENAME = exports.DOCTOR_REPORT_FILENAME = exports.MANIFEST_FILENAME = exports.SIGNING_LOCAL_EXAMPLE_FILENAME = exports.SIGNING_LOCAL_FILENAME = exports.GENERATED_SHIMS_DIR = exports.GENERATED_DIR = exports.SUPPORTED_EXPO_SDKS = exports.RNOH_CLI_VERSION = exports.RNOH_VERSION = exports.TEMPLATE_VERSION = exports.TOOLKIT_VERSION = exports.CLI_NAME = exports.TOOLKIT_PACKAGE_NAME = void 0;
|
|
4
4
|
exports.TOOLKIT_PACKAGE_NAME = 'expo-harmony-toolkit';
|
|
5
5
|
exports.CLI_NAME = 'expo-harmony';
|
|
6
|
-
exports.TOOLKIT_VERSION = '1.9.
|
|
6
|
+
exports.TOOLKIT_VERSION = '1.9.1';
|
|
7
7
|
exports.TEMPLATE_VERSION = 'rnoh-0.82.29';
|
|
8
8
|
exports.RNOH_VERSION = '0.82.29';
|
|
9
9
|
exports.RNOH_CLI_VERSION = '0.82.29';
|
|
@@ -8,4 +8,4 @@ export declare const SUPPORTING_SAMPLE_PATHS: readonly ["examples/official-app-s
|
|
|
8
8
|
export declare const VERIFIED_JS_UI_CAPABILITY_NAMES: readonly ["expo-router", "expo-linking", "expo-constants", ...("react-native-reanimated" | "react-native-svg")[]];
|
|
9
9
|
export declare const PREVIEW_CAPABILITY_DEFINITIONS: import("..").CapabilityDefinition[];
|
|
10
10
|
export declare const EXPERIMENTAL_CAPABILITY_NAMES: readonly string[];
|
|
11
|
-
export declare const PUBLIC_CURRENT_VERSION = "1.9.
|
|
11
|
+
export declare const PUBLIC_CURRENT_VERSION = "1.9.1";
|
package/docs/cli-build.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI 构建指南
|
|
2
2
|
|
|
3
|
-
`v1.9.
|
|
3
|
+
`v1.9.1` 延续 `verified + preview + experimental` 支持分层,把 bare workflow 放进 intake baseline,并补上 `build-hap` 的本地 HAR normalize opt-out;`expo55-rnoh082-ui-stack` 仍是唯一 verified 矩阵。
|
|
4
4
|
|
|
5
5
|
CLI 命令集合不变:
|
|
6
6
|
|
|
@@ -105,6 +105,27 @@ expo-harmony env --strict
|
|
|
105
105
|
expo-harmony build-hap --mode debug
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
+
### HAR normalize opt-out
|
|
109
|
+
|
|
110
|
+
默认情况下,`build-hap` 会把 root / entry `oh-package.json5` 里的 `file:*.har` 本地依赖解压到 `harmony/expo-harmony-local-deps`,再让 `ohpm` 消费解压后的目录。这条路径仍是默认 verified build path。
|
|
111
|
+
|
|
112
|
+
如果项目已经确认当前 DevEco / ohpm 能直接消费纯 HAR,可以显式跳过这一步:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
EXPO_HARMONY_SKIP_HAR_NORMALIZE=1 expo-harmony build-hap --mode debug
|
|
116
|
+
expo-harmony build-hap --mode debug --no-har-normalize
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
开启后:
|
|
120
|
+
|
|
121
|
+
- `file:../node_modules/.../*.har` specifier 会保持原样
|
|
122
|
+
- 不生成 `expo-harmony-local-deps`
|
|
123
|
+
- 不临时注册 normalized local HAR modules 到 `build-profile.json5`
|
|
124
|
+
- 不执行依赖 normalized local RNOH 目录的 codegen / path 兜底
|
|
125
|
+
- `ohpm install --all` 与 `hvigor assembleHap` 继续执行
|
|
126
|
+
|
|
127
|
+
该开关是 escape hatch,不代表 opt-out 路径和默认路径具备完全相同的兼容兜底。
|
|
128
|
+
|
|
108
129
|
### Release
|
|
109
130
|
|
|
110
131
|
```bash
|
package/docs/roadmap.md
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
## 当前主线
|
|
68
68
|
|
|
69
|
-
`v1.8.x` 已完成 repo 内可收口项,当前主线切到 `v1.9.x`。`v1.9.0` 先落 bare workflow baseline、app foundation modules 与 `react-native-gesture-handler` formal slice
|
|
69
|
+
`v1.8.x` 已完成 repo 内可收口项,当前主线切到 `v1.9.x`。`v1.9.0` 先落 bare workflow baseline、app foundation modules 与 `react-native-gesture-handler` formal slice;`v1.9.1` 作为 build-hap patch release,补上 HAR normalize opt-out,让已确认 ohpm 可直接消费纯 HAR 的项目可以绕过 `expo-harmony-local-deps`。剩余需要真机或 release HAP 的证据继续保留在 v1.8.x capability board,不阻塞 v1.9.x 的 bare / foundation / third-party onboarding 工作。
|
|
70
70
|
|
|
71
71
|
### v1.8.0 Intake Hardening + Parallel Promotion
|
|
72
72
|
|
|
@@ -153,7 +153,28 @@
|
|
|
153
153
|
- acceptance 记录
|
|
154
154
|
- 本阶段不改变 `verified` 边界;foundation modules 以 `preview` + `runtimeMode=shim` 记录,`react-native-gesture-handler` 以 `experimental` + formal adapter slice 记录
|
|
155
155
|
|
|
156
|
-
### v1.9.1
|
|
156
|
+
### v1.9.1 Build HAP HAR Normalize Opt-out
|
|
157
|
+
|
|
158
|
+
目标日期:`2026-06-02`
|
|
159
|
+
|
|
160
|
+
目标:把 issue #1 中的本地 HAR 解压 opt-out 做成正式 patch release,同时不改变默认 verified build path。
|
|
161
|
+
|
|
162
|
+
- `build-hap` 新增显式 opt-out:
|
|
163
|
+
- `EXPO_HARMONY_SKIP_HAR_NORMALIZE=1`
|
|
164
|
+
- `expo-harmony build-hap --no-har-normalize`
|
|
165
|
+
- 默认继续执行现有 `normalizeLocalHarDependencies` 路径:
|
|
166
|
+
- 解压 `file:*.har` 到 `expo-harmony-local-deps`
|
|
167
|
+
- 临时改写 root / entry `oh-package.json5`
|
|
168
|
+
- 注册 normalized local HAR modules
|
|
169
|
+
- 执行依赖 normalized local package 的 RNOH codegen / path 兜底
|
|
170
|
+
- opt-out 开启后:
|
|
171
|
+
- 保留 `file:../node_modules/.../*.har`
|
|
172
|
+
- 让 `ohpm install --all` 直接消费纯 HAR
|
|
173
|
+
- 在 build report / CLI 文档里明确提示跳过的自动兜底
|
|
174
|
+
- 本阶段只改变 build-hap escape hatch,不扩大 `verified` 能力边界
|
|
175
|
+
- `v1.9.0` 已经存在于 npm `next`,本阶段发布为 `v1.9.1` 并进入 `latest`
|
|
176
|
+
|
|
177
|
+
### v1.9.2 Third-party Native Wave A
|
|
157
178
|
|
|
158
179
|
目标日期:`2026-09-30`
|
|
159
180
|
|
|
@@ -172,7 +193,7 @@
|
|
|
172
193
|
- debug + release evidence
|
|
173
194
|
- 任何进入 Wave A 的 blocker,都不允许继续停留在“矩阵外模糊探索”
|
|
174
195
|
|
|
175
|
-
### v1.9.
|
|
196
|
+
### v1.9.3 Third-party Native Wave B + Regression Farm
|
|
176
197
|
|
|
177
198
|
目标日期:`2026-10-31`
|
|
178
199
|
|