@tarojs/webpack5-runner 4.2.1 → 4.2.2-alpha.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.
Files changed (51) hide show
  1. package/dist/index.mini.js +15 -4
  2. package/dist/index.mini.js.map +1 -1
  3. package/dist/plugins/AsyncSubPackagePlugin.js +489 -0
  4. package/dist/plugins/AsyncSubPackagePlugin.js.map +1 -0
  5. package/dist/plugins/BuildNativePlugin.js +22 -11
  6. package/dist/plugins/BuildNativePlugin.js.map +1 -1
  7. package/dist/plugins/HarmonyPlugin.js +1 -1
  8. package/dist/plugins/HarmonyPlugin.js.map +1 -1
  9. package/dist/plugins/MiniCompileModePlugin.js +49 -4
  10. package/dist/plugins/MiniCompileModePlugin.js.map +1 -1
  11. package/dist/plugins/MiniPlugin.js +282 -58
  12. package/dist/plugins/MiniPlugin.js.map +1 -1
  13. package/dist/plugins/SubPackageIndiePlugin.js +1060 -0
  14. package/dist/plugins/SubPackageIndiePlugin.js.map +1 -0
  15. package/dist/plugins/TaroInjectSyncCorePlugin.js +39 -0
  16. package/dist/plugins/TaroInjectSyncCorePlugin.js.map +1 -0
  17. package/dist/plugins/TaroNormalModule.js +16 -0
  18. package/dist/plugins/TaroNormalModule.js.map +1 -1
  19. package/dist/plugins/TaroNormalModulesPlugin.js +127 -6
  20. package/dist/plugins/TaroNormalModulesPlugin.js.map +1 -1
  21. package/dist/plugins/TaroSingleEntryPlugin.js +1 -1
  22. package/dist/plugins/TaroSingleEntryPlugin.js.map +1 -1
  23. package/dist/shared-runtime/app-shim.js +305 -0
  24. package/dist/shared-runtime/async-provider.js +144 -0
  25. package/dist/shared-runtime/build-shared-runtime.js +377 -0
  26. package/dist/shared-runtime/build-shared-runtime.js.map +1 -0
  27. package/dist/shared-runtime/constants.js +50 -0
  28. package/dist/shared-runtime/constants.js.map +1 -0
  29. package/dist/shared-runtime/entry.sync.js +102 -0
  30. package/dist/shared-runtime/externals.js +96 -0
  31. package/dist/shared-runtime/externals.js.map +1 -0
  32. package/dist/shared-runtime/scan-imperative-api.js +267 -0
  33. package/dist/shared-runtime/scan-imperative-api.js.map +1 -0
  34. package/dist/template/comp.js +2 -1
  35. package/dist/utils/asyncSubPackage.js +106 -0
  36. package/dist/utils/asyncSubPackage.js.map +1 -0
  37. package/dist/utils/component.js +2 -1
  38. package/dist/utils/component.js.map +1 -1
  39. package/dist/utils/forceCustomWrapper.js +17 -0
  40. package/dist/utils/forceCustomWrapper.js.map +1 -0
  41. package/dist/utils/webpack.js +40 -1
  42. package/dist/utils/webpack.js.map +1 -1
  43. package/dist/webpack/HarmonyWebpackPlugin.js +3 -1
  44. package/dist/webpack/HarmonyWebpackPlugin.js.map +1 -1
  45. package/dist/webpack/MiniBaseConfig.js +2 -0
  46. package/dist/webpack/MiniBaseConfig.js.map +1 -1
  47. package/dist/webpack/MiniCombination.js +51 -26
  48. package/dist/webpack/MiniCombination.js.map +1 -1
  49. package/dist/webpack/MiniWebpackPlugin.js +17 -1
  50. package/dist/webpack/MiniWebpackPlugin.js.map +1 -1
  51. package/package.json +14 -13
@@ -0,0 +1,377 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.buildSharedRuntime = void 0;
39
+ const path = __importStar(require("node:path"));
40
+ const helper_1 = require("@tarojs/helper");
41
+ const webpack_1 = __importDefault(require("webpack"));
42
+ const constants_1 = require("./constants");
43
+ const externals_1 = require("./externals");
44
+ /**
45
+ * 主构建成功后,额外跑独立 webpack 子构建产出共享运行时(split 模式):
46
+ * - sync-core(taro-shared-sync.js):随业务包,emit 到 outputDir 根,同步 require。
47
+ * - async-provider:放异步子包 shared-async-v1/,全局共享一份。
48
+ *
49
+ * 为何独立 webpack 而非 child compiler:主构建 externals 把 @tarojs/*+react 外置了,
50
+ * 而这些 bundle 要把它们真正打进产物,依赖集正相反。独立 compiler 自带反向 external。
51
+ * 依赖解析:react/@tarojs/* 从用户项目 node_modules 解析(resolve.modules 指向 appPath)。
52
+ */
53
+ function buildSharedRuntime(combination) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ var _a, _b, _c;
56
+ const { appPath, outputDir } = combination;
57
+ const config = combination.config;
58
+ const globalObject = ((_a = config.output) === null || _a === void 0 ? void 0 : _a.globalObject) || 'wx';
59
+ const shimDir = path.resolve(__dirname); // dist/shared-runtime(运行时模板所在)
60
+ const userNodeModules = path.resolve(appPath, 'node_modules');
61
+ const asyncRequest = getAsyncRequest(config);
62
+ // 共享运行时模板子构建的 DefinePlugin 常量:按 config 重建 runtime 分支常量(保 DOM 分支与主构建一致),
63
+ // 叠加运行时模板所需的宏。
64
+ const defineConstants = Object.assign(Object.assign(Object.assign({}, collectUserDefineConstants(combination)), buildDefineConstants(config)), {
65
+ // 运行时模板(entry.sync.js / async-provider.js)引用的宏,单一来源为 constants.ts + globalObject 配置:
66
+ // 注意:__TARO_GLOBAL_OBJECT__ 是**标识符**(不 JSON.stringify),其它是**字符串常量**(JSON.stringify)。
67
+ __TARO_GLOBAL_OBJECT__: globalObject, __TARO_SHARED_GLOBAL__: JSON.stringify(constants_1.SHARED_GLOBAL_ASYNC), __TARO_SHARED_ASYNC_REQUEST__: JSON.stringify(asyncRequest), __TARO_RUNTIME_VERSION__: JSON.stringify(constants_1.RUNTIME_GLOBAL_VERSION) });
68
+ // 接入方声明的额外共享包(CLI 不认识具体包名),按加载时机分两类:
69
+ // - sharedRuntimeExtraPackages: 随异步核加载,多业务包共享(不参与首屏时序的 API 定义/异步初始化)
70
+ // - sharedRuntimeSyncExtraPackages: 随同步核加载,每业务包各带一份(必须在首屏 window INIT
71
+ // 广播前注册监听器/写全局状态等——异步核 .then 晚于首屏 onLoad,时机敏感副作用放这里)
72
+ // 两者都被 shouldShareExternal 识别为共享 external,不进业务包主 bundle,仅执行时机不同。
73
+ const extraPackages = config.sharedRuntimeExtraPackages || [];
74
+ const syncExtraPackages = config.sharedRuntimeSyncExtraPackages || [];
75
+ // 平台插件(plugin-html/plugin-inject/plugin-http/*-devtools 等)通过 platform.runtimePath 注入的
76
+ // side-effect runtime 也是 @tarojs/*,被主构建 external 成读共享全局,但运行时核只注册固定清单,
77
+ // 会漏掉它们 → 业务包读到 undefined → 其 hooks.tap 从未执行(如 plugin-html 的 <i> 标签映射失效,
78
+ // 报 `Template tmpl_0_i not found`)。这里从 runtimePath 挑出漏网项,一并作为同步核额外入口打包执行,
79
+ // 使其副作用在同步核内(与模板消费方同一 @tarojs/shared 单例)就位。对业务透明,无需手动声明。
80
+ const missingRuntimes = (0, externals_1.computeMissingRuntimes)(config.runtimePath, extraPackages, syncExtraPackages);
81
+ // entry 用数组多入口:extras 先执行副作用,最后核心 entry.
82
+ // webpack 会按 __webpack_exec__ 序列依次执行,extras 顶层副作用(mergeReconciler 等)必然先于
83
+ // 核心 entry 完成——mock-exec 已实测证实(Node vm 跑产物 + mock @tarojs/shared,验证 hostConfig
84
+ // 被 tap、initNativeApi hook 就位)。
85
+ const buildEntry = (coreEntryFile, extras) => {
86
+ const core = path.join(shimDir, coreEntryFile);
87
+ return extras.length ? [...extras, core] : core;
88
+ };
89
+ const base = (name, entry, emitTo, extras) => ({
90
+ name,
91
+ mode: 'production',
92
+ target: ['web', 'es5'],
93
+ entry: buildEntry(entry, extras),
94
+ output: {
95
+ path: path.join(outputDir, emitTo),
96
+ filename: `${name}.js`,
97
+ globalObject,
98
+ iife: true,
99
+ },
100
+ optimization: { minimize: true, splitChunks: false, runtimeChunk: false },
101
+ plugins: [
102
+ new webpack_1.default.DefinePlugin(defineConstants),
103
+ new webpack_1.default.optimize.LimitChunkCountPlugin({ maxChunks: 1 }),
104
+ ],
105
+ resolve: { modules: [userNodeModules, 'node_modules'] },
106
+ });
107
+ // sync-core:放 outputDir 根。SyncExtraPackages 走同步核入口(时机敏感副作用)。
108
+ // missingRuntimes 前置:它们是平台级 side-effect runtime,tap 幂等无顺序依赖,前置更符合语义。
109
+ // require.async(shared-async-v1/index) 由 externalsType='promise' 编译得到。
110
+ const syncCoreConfig = base(constants_1.SHARED_SYNC_CORE_NAME, 'entry.sync.js', '', [...missingRuntimes, ...syncExtraPackages]);
111
+ syncCoreConfig.externalsType = 'promise';
112
+ syncCoreConfig.externals = { [asyncRequest]: `require.async(${JSON.stringify(asyncRequest)})` };
113
+ // async-provider:放 shared-async-v1/。extraPackages(异步)以数组多入口在核心 entry 前先执行副作用。
114
+ const asyncConfig = base(constants_1.SHARED_ASYNC_PROVIDER_NAME, 'async-provider.js', constants_1.SHARED_ASYNC_ROOT, extraPackages);
115
+ asyncConfig.externals = reverseExternals(globalObject);
116
+ yield runWebpack([syncCoreConfig, asyncConfig]);
117
+ // subPackageIndie 自包含:把刚产出的同步核 taro-shared-sync.js 拷进每个 mainPackageRoot。
118
+ // subPackageIndie 会把 app.js 等 runtime chunks 搬进 mainPackageRoot,app.js 头部的
119
+ // require("./taro-shared-sync") 是"同级"引用——同步核也必须在同目录。根级那份保留
120
+ // (ENTRY / F6 native-components 仍从根级 require)。mainPackageRoots 由 MiniPlugin.apply
121
+ // 反向挂在 combination 上;非 subPackageIndie 场景该列表为空,此步跳过。
122
+ copySyncCoreIntoMainPackageRoots(outputDir, ((_c = (_b = combination.subPackageIndiePlugin) === null || _b === void 0 ? void 0 : _b.getAllMainPackageRoots) === null || _c === void 0 ? void 0 : _c.call(_b)) || []);
123
+ // 生成 shared-async 占位入口:index.js 同步 require 真实 chunk(async-provider.js),
124
+ // 微信 require.async 只能加载 app.json 注册过的分包页面入口。
125
+ const asyncDir = path.join(outputDir, constants_1.SHARED_ASYNC_ROOT);
126
+ const fileType = config.fileType || { templ: '.wxml', config: '.json' };
127
+ helper_1.fs.writeFileSync(path.join(asyncDir, 'index.js'), `require('./${constants_1.SHARED_ASYNC_PROVIDER_NAME}.js');\n`);
128
+ helper_1.fs.writeFileSync(path.join(asyncDir, `index${fileType.config || '.json'}`), '{"usingComponents":{}}\n');
129
+ helper_1.fs.writeFileSync(path.join(asyncDir, `index${fileType.templ || '.wxml'}`), '<view/>\n');
130
+ // 产物元数据 manifest:记录本次共享运行时用到的 react 全家桶精确版本 + 运行时协议版本。
131
+ // 供宿主/接入方排查版本一致性(多业务包 + 宿主 provider 的 react 单例必须版本一致)。
132
+ writeRuntimeManifest(asyncDir, userNodeModules, extraPackages, syncExtraPackages);
133
+ // dist 自带运行时:把 shared-async 注册进本项目 dist/app.json + 配 preloadRule,使 dist 可直接被开发者工具打开。
134
+ registerAsyncSubPackage(outputDir, fileType.config || '.json');
135
+ });
136
+ }
137
+ exports.buildSharedRuntime = buildSharedRuntime;
138
+ /**
139
+ * subPackageIndie 自包含:把 outputDir 根的 taro-shared-sync.js(及其 .LICENSE.txt)拷进每个
140
+ * mainPackageRoot,使其与被 subPackageIndie 搬进去的 app.js 同级(app.js 头部 require 的是
141
+ * "./taro-shared-sync",天然同级)。mainPackageRoots 为空时(非 subPackageIndie)直接跳过。
142
+ *
143
+ * 拷贝后清理根级冗余:subPackageIndie 的 optimizeAssets 已删根级 app.js(SubPackageIndiePlugin
144
+ * 接管了根级 ENTRY),故根级 taro-shared-sync.js 不再有消费者(ENTRY app.js 没了;native-components
145
+ * 是互斥的另一种构建,不会有 mainPackageRoot)。此时删根级那份,与 taro-blended-project@main 的
146
+ * 产物结构对齐(businessRoot 根不含同步核)。保守判断:仅当根级确无 app.js 时才删,避免误伤。
147
+ */
148
+ function copySyncCoreIntoMainPackageRoots(outputDir, mainPackageRoots) {
149
+ if (!mainPackageRoots.length)
150
+ return;
151
+ const syncCoreFile = `${constants_1.SHARED_SYNC_CORE_NAME}.js`;
152
+ const src = path.join(outputDir, syncCoreFile);
153
+ if (!helper_1.fs.existsSync(src))
154
+ return;
155
+ const licenseFile = `${syncCoreFile}.LICENSE.txt`;
156
+ const licenseSrc = path.join(outputDir, licenseFile);
157
+ const hasLicense = helper_1.fs.existsSync(licenseSrc);
158
+ for (const root of mainPackageRoots) {
159
+ const destDir = path.join(outputDir, root);
160
+ if (!helper_1.fs.existsSync(destDir))
161
+ continue;
162
+ helper_1.fs.copySync(src, path.join(destDir, syncCoreFile), { overwrite: true });
163
+ if (hasLicense)
164
+ helper_1.fs.copySync(licenseSrc, path.join(destDir, licenseFile), { overwrite: true });
165
+ }
166
+ // 根级冗余清理:根级 app.js 已被 subPackageIndie 删除 → 根级同步核无消费者,删之对齐 main。
167
+ if (!helper_1.fs.existsSync(path.join(outputDir, 'app.js'))) {
168
+ helper_1.fs.removeSync(src);
169
+ if (hasLicense)
170
+ helper_1.fs.removeSync(licenseSrc);
171
+ }
172
+ }
173
+ /**
174
+ * 写产物元数据 manifest(runtime-manifest.json)到异步子包目录。
175
+ * 记录 react 全家桶(React 单例敏感、版本错配会真出错)精确版本 + 运行时协议版本号。
176
+ * 定位:仅产物元数据,供宿主/人工排查;运行时跨包错配由同步核/异步核的 __rtVersion 校验兜底。
177
+ *
178
+ * extraPackages(config.mini.sharedRuntimeExtraPackages,如某私有插件的 runtime)的版本也一并记录:
179
+ * 随异步核打包共享,多业务包若声明不同版本会静默漂移(不像 react 全家桶有 __rtVersion 硬 gate)。
180
+ * 这里只做**记录**供人工排查,不做编译期 gate(这些包的版本差异未必出错,硬 gate 易误报,与
181
+ * react 全家桶策略一致:只 react 全家桶做硬校验)。
182
+ */
183
+ function writeRuntimeManifest(asyncDir, userNodeModules, extraPackages = [], syncExtraPackages = []) {
184
+ const REACT_FAMILY = ['react', 'react-dom', 'react-reconciler', 'scheduler', '@tarojs/react'];
185
+ const versions = {};
186
+ REACT_FAMILY.forEach((pkg) => {
187
+ const v = readPackageVersion(userNodeModules, pkg);
188
+ if (v)
189
+ versions[pkg] = v;
190
+ });
191
+ // extraPackages 可能带子路径(如 '@scope/my-shared-plugin/runtime-mini'),
192
+ // 版本要从包根 package.json 读——取 scope/包名部分(前 1 或 2 段)作为 readPackageVersion 的 key。
193
+ const collectVersions = (pkgs) => {
194
+ const out = {};
195
+ pkgs.forEach((pkg) => {
196
+ const pkgRoot = pkg.startsWith('@') ? pkg.split('/').slice(0, 2).join('/') : pkg.split('/')[0];
197
+ const v = readPackageVersion(userNodeModules, pkgRoot);
198
+ if (v)
199
+ out[pkgRoot] = v;
200
+ });
201
+ return out;
202
+ };
203
+ const extraVersions = collectVersions(extraPackages);
204
+ const syncExtraVersions = collectVersions(syncExtraPackages);
205
+ const manifest = {
206
+ runtimeProtocolVersion: constants_1.RUNTIME_GLOBAL_VERSION,
207
+ global: constants_1.SHARED_GLOBAL_ASYNC,
208
+ subPackage: constants_1.SHARED_ASYNC_ROOT,
209
+ reactFamilyVersions: versions,
210
+ extraPackageVersions: extraVersions,
211
+ syncExtraPackageVersions: syncExtraVersions,
212
+ };
213
+ helper_1.fs.writeFileSync(path.join(asyncDir, 'runtime-manifest.json'), JSON.stringify(manifest, null, 2) + '\n');
214
+ }
215
+ /** 从指定 node_modules 读取包的 version(读不到返回空串,不阻断构建) */
216
+ function readPackageVersion(nodeModules, pkg) {
217
+ try {
218
+ const pkgJson = helper_1.fs.readJSONSync(path.join(nodeModules, pkg, 'package.json'));
219
+ return pkgJson.version || '';
220
+ }
221
+ catch (_a) {
222
+ return '';
223
+ }
224
+ }
225
+ /** 把 shared-async 注册进 dist/app.json 的 subPackages(幂等),并配 preloadRule 预下载 */
226
+ function registerAsyncSubPackage(outputDir, configExt) {
227
+ const appConfigPath = path.join(outputDir, `app${configExt}`);
228
+ if (!helper_1.fs.existsSync(appConfigPath))
229
+ return;
230
+ const appConfig = helper_1.fs.readJSONSync(appConfigPath);
231
+ // 保留项目原用的大小写键:subPackages(默认)或小写 subpackages。避免两种大小写同时写回导致微信双注册冲突。
232
+ const key = appConfig.subpackages && !appConfig.subPackages ? 'subpackages' : 'subPackages';
233
+ const subPackages = appConfig[key] || [];
234
+ if (!subPackages.some((s) => s.root === constants_1.SHARED_ASYNC_ROOT)) {
235
+ subPackages.push({ root: constants_1.SHARED_ASYNC_ROOT, pages: ['index'], independent: false });
236
+ }
237
+ appConfig[key] = subPackages;
238
+ addPreloadRule(appConfig);
239
+ helper_1.fs.writeJSONSync(appConfigPath, appConfig, { spaces: 2 });
240
+ }
241
+ /**
242
+ * 配 preloadRule:进入业务页面前预下载 shared-async 分包,缩小首屏异步窗口。
243
+ * 仅对 dist 自带运行时场景(本项目 dist 可直接被开发者工具打开);宿主场景由接入方按布局自配。
244
+ * 幂等:已存在的 preloadRule 项不覆盖,只对未声明的业务页补 shared-async。
245
+ */
246
+ function addPreloadRule(appConfig) {
247
+ const preloadRule = appConfig.preloadRule || {};
248
+ // 收集业务页面路径:主包 pages + 各业务子包页面(排除 shared-async 自身)
249
+ const triggerPages = [];
250
+ (appConfig.pages || []).forEach((p) => triggerPages.push(p));
251
+ (appConfig.subPackages || appConfig.subpackages || []).forEach((sub) => {
252
+ if (sub.root === constants_1.SHARED_ASYNC_ROOT)
253
+ return;
254
+ (sub.pages || []).forEach((pg) => triggerPages.push(`${sub.root}/${pg}`.replace(/\/+/g, '/')));
255
+ });
256
+ triggerPages.forEach((page) => {
257
+ const existing = preloadRule[page];
258
+ if (!existing) {
259
+ preloadRule[page] = { packages: [constants_1.SHARED_ASYNC_ROOT], network: 'all' };
260
+ }
261
+ else if (Array.isArray(existing.packages) && !existing.packages.includes(constants_1.SHARED_ASYNC_ROOT)) {
262
+ existing.packages.push(constants_1.SHARED_ASYNC_ROOT);
263
+ }
264
+ });
265
+ if (Object.keys(preloadRule).length)
266
+ appConfig.preloadRule = preloadRule;
267
+ }
268
+ /**
269
+ * async-provider 的反向 external:凡同步核已提供的包都读共享运行时全局,不打副本,避免双实例。
270
+ * react 全家桶部分(含开发模式 jsx-dev-runtime)与 entry.sync.js 同步注册的清单保持一致——
271
+ * 单一真理源为 externals.ts 的 SYNC_REACT_MEMBERS,改动只需改那一处。
272
+ */
273
+ function reverseExternals(globalObject) {
274
+ const g = `${globalObject}.${constants_1.SHARED_GLOBAL_ASYNC}`;
275
+ const ext = (key) => `var ${g}[${JSON.stringify(key)}]`;
276
+ const result = {
277
+ // 非 react 部分:@tarojs/* 运行时和平台 runtime,同步核已提供
278
+ '@tarojs/runtime': ext('@tarojs/runtime'),
279
+ '@tarojs/shared': ext('@tarojs/shared'),
280
+ '@tarojs/plugin-platform-weapp/dist/runtime': ext('@tarojs/plugin-platform-weapp/dist/runtime'),
281
+ };
282
+ // react 全家桶部分:从 externals.ts 单一清单展开
283
+ for (const m of externals_1.SYNC_REACT_MEMBERS)
284
+ result[m] = ext(m);
285
+ return result;
286
+ }
287
+ function getAsyncRequest(config) {
288
+ // 允许接入方通过 config.mini.sharedRuntimeAsyncRequest 覆盖(业务独立编译不预知宿主布局)
289
+ const custom = config.sharedRuntimeAsyncRequest;
290
+ if (typeof custom === 'string' && custom)
291
+ return custom;
292
+ // 默认值:相对路径(业务被拷进宿主子包后由接入方按实际布局配置覆盖)
293
+ return `${constants_1.SHARED_ASYNC_ROOT}/index`;
294
+ }
295
+ /**
296
+ * 从主构建 webpack chain 收集接入方注入的自定义 DefinePlugin 常量,透传给异步核子构建。
297
+ *
298
+ * 场景:某私有插件通过 webpackChain 独立 new DefinePlugin 注入 `process.env.SOME_RUNTIME_FLAG`
299
+ * 等编译期开关控制其 runtime 行为。其 runtime 被 sharedRuntimeExtraPackages 打进异步核,但异步核
300
+ * 是独立子构建、不继承主构建 DefinePlugin,若不透传,这些 `process.env.X` 会被兜底的
301
+ * 'process.env':'({})' 吞成 undefined,致特性静默失效(真机现象:根字号开关失效 → root-font-size
302
+ * 空 → 字体变小)。
303
+ *
304
+ * 仅收集**具名精确键**(如 'process.env.X'、裸标识符),显式跳过 'process' / 'process.env' 这类
305
+ * 前缀/裸键——它们由 buildDefineConstants 兜底统一处理,不能被业务值覆盖。调用时机在主构建结束后
306
+ * (chain 已 finalize,业务 DefinePlugin 都已装配),从 combination.chain 遍历。
307
+ */
308
+ function collectUserDefineConstants(combination) {
309
+ var _a;
310
+ const result = {};
311
+ const chain = combination.chain;
312
+ const store = (_a = chain === null || chain === void 0 ? void 0 : chain.plugins) === null || _a === void 0 ? void 0 : _a.store;
313
+ if (!store || typeof store.forEach !== 'function')
314
+ return result;
315
+ store.forEach((plugin) => {
316
+ var _a;
317
+ try {
318
+ // 识别 DefinePlugin:优先引用相等(同一 webpack 实例时成立);兜底按构造器名——业务插件自行
319
+ // require('webpack') 解析到未被 pnpm 去重的另一实例时引用相等会失败,靠 .name === 'DefinePlugin'
320
+ // 仍能命中,避免静默漏收其 define 常量。
321
+ const ctor = (_a = plugin === null || plugin === void 0 ? void 0 : plugin.get) === null || _a === void 0 ? void 0 : _a.call(plugin, 'plugin');
322
+ if (ctor !== webpack_1.default.DefinePlugin && (ctor === null || ctor === void 0 ? void 0 : ctor.name) !== 'DefinePlugin')
323
+ return;
324
+ const defs = (plugin.get('args') || [])[0];
325
+ if (!defs || typeof defs !== 'object')
326
+ return;
327
+ Object.keys(defs).forEach((key) => {
328
+ // 跳过前缀/裸键,交给兜底;其余具名键透传(后续 buildDefineConstants 会覆盖同名核心键)
329
+ if (key === 'process' || key === 'process.env')
330
+ return;
331
+ result[key] = defs[key];
332
+ });
333
+ }
334
+ catch (_b) {
335
+ /* 单个插件读取失败不影响整体,跳过 */
336
+ }
337
+ });
338
+ return result;
339
+ }
340
+ /** 主构建 DefinePlugin 不可得时,按 config 重建 runtime 分支常量 */
341
+ function buildDefineConstants(config) {
342
+ var _a, _b, _c, _d, _e, _f, _g;
343
+ const runtime = config.runtime || {};
344
+ const framework = config.framework || 'react';
345
+ const buildAdapter = config.buildAdapter || 'weapp';
346
+ return {
347
+ 'process.env.FRAMEWORK': JSON.stringify(framework),
348
+ 'process.env.TARO_ENV': JSON.stringify(buildAdapter),
349
+ 'process.env.TARO_PLATFORM': JSON.stringify(process.env.TARO_PLATFORM || 'mini'),
350
+ 'process.env.SUPPORT_TARO_POLYFILL': '"disabled"',
351
+ 'process.env.NODE_ENV': JSON.stringify(config.mode || 'production'),
352
+ ENABLE_INNER_HTML: (_a = runtime.enableInnerHTML) !== null && _a !== void 0 ? _a : true,
353
+ ENABLE_ADJACENT_HTML: (_b = runtime.enableAdjacentHTML) !== null && _b !== void 0 ? _b : false,
354
+ ENABLE_SIZE_APIS: (_c = runtime.enableSizeAPIs) !== null && _c !== void 0 ? _c : false,
355
+ ENABLE_TEMPLATE_CONTENT: (_d = runtime.enableTemplateContent) !== null && _d !== void 0 ? _d : false,
356
+ ENABLE_CLONE_NODE: (_e = runtime.enableCloneNode) !== null && _e !== void 0 ? _e : false,
357
+ ENABLE_CONTAINS: (_f = runtime.enableContains) !== null && _f !== void 0 ? _f : false,
358
+ ENABLE_MUTATION_OBSERVER: (_g = runtime.enableMutationObserver) !== null && _g !== void 0 ? _g : false,
359
+ // 兜底:额外共享包可能用未知的 process.env.X 或裸 process,
360
+ // 小程序无 process 全局 → 未显式定义的都替换掉,避免 "process is not defined"。
361
+ // webpack DefinePlugin 精确键(上面的 process.env.NODE_ENV 等)优先于 'process.env' 前缀键。
362
+ 'process.env': '({})',
363
+ process: '({"env":{}})',
364
+ };
365
+ }
366
+ function runWebpack(configs) {
367
+ return new Promise((resolve, reject) => {
368
+ (0, webpack_1.default)(configs, (err, stats) => {
369
+ if (err)
370
+ return reject(err);
371
+ if (stats === null || stats === void 0 ? void 0 : stats.hasErrors())
372
+ return reject(new Error(stats.toString({ errors: true })));
373
+ resolve();
374
+ });
375
+ });
376
+ }
377
+ //# sourceMappingURL=build-shared-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-shared-runtime.js","sourceRoot":"","sources":["../../src/shared-runtime/build-shared-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /** 共享运行时(split 模式)相关常量 */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SYNC_CORE_REGISTERED_RUNTIMES = exports.REG_POST = exports.SHARED_ASYNC_PROVIDER_NAME = exports.SHARED_ASYNC_ROOT = exports.SHARED_SYNC_CORE_NAME = exports.SHARED_GLOBAL_ASYNC = exports.RUNTIME_GLOBAL_VERSION = void 0;
5
+ /**
6
+ * 运行时共享协议版本号(手动维护的破坏性变更计数,与 Taro 包版本无关)。
7
+ * 仅当挂到全局的运行时接口发生破坏性变更时才 +1。
8
+ * 全局名与异步核子包名都由它拼出,bump 时只改这一处:
9
+ * 老业务包仍读旧版本全局名、V1/V2 provider 子包不撞名,可在同一宿主真隔离共存。
10
+ */
11
+ exports.RUNTIME_GLOBAL_VERSION = 1;
12
+ /**
13
+ * 挂运行时的全局对象名(wx 下)。业务包 external 目标 + 同步核/异步核挂载点。
14
+ * 形如 __TARO_RT_ASYNC_V1__。
15
+ */
16
+ exports.SHARED_GLOBAL_ASYNC = `__TARO_RT_ASYNC_V${exports.RUNTIME_GLOBAL_VERSION}__`;
17
+ /**
18
+ * 同步核产物文件名(不含 .js),emit 到 outputDir 根,随业务包。
19
+ * 业务包 app.js 顶层同步 require 它,先于任何页面注册执行。
20
+ */
21
+ exports.SHARED_SYNC_CORE_NAME = 'taro-shared-sync';
22
+ /**
23
+ * 异步核共享子包 root(app.json subPackages 注册;require.async 目标)。
24
+ * 全局共享一份,形如 shared-async-v1。
25
+ */
26
+ exports.SHARED_ASYNC_ROOT = `shared-async-v${exports.RUNTIME_GLOBAL_VERSION}`;
27
+ /** 异步核 provider 产物文件名(不含 .js),emit 到 SHARED_ASYNC_ROOT 下。 */
28
+ exports.SHARED_ASYNC_PROVIDER_NAME = 'async-provider';
29
+ /**
30
+ * taro-loader 的 runtimePath `post:` 前缀(镜像 taro-loader/src/constants.ts 的 REG_POST)。
31
+ * 单独定义而非 import:taro-loader 是编译期 loader 包,跨已编译包 import 常量不稳妥,
32
+ * 且此正则极简、语义固定,就地镜像一份即可。改动时两处保持一致。
33
+ */
34
+ exports.REG_POST = /^post:/;
35
+ /**
36
+ * 同步核 entry.sync.js 已静态 require 并 share() 到共享全局的「runtime 类」模块清单。
37
+ * computeMissingRuntimes 用它做差集:platform.runtimePath 里已在此清单的(如平台 runtime)
38
+ * 无需再作为额外入口重复打进同步核。
39
+ *
40
+ * ⚠️ 改动 entry.sync.js 里 require 的平台/运行时模块清单时必须同步此常量
41
+ * (tests/shouldShareExternal.spec.ts 有一致性守护单测防漂移)。
42
+ * 注:react 全家桶虽也在 entry.sync.js 同步 require,但不属于 platform.runtimePath
43
+ * (runtimePath 只承载 @tarojs/* 平台与插件 runtime),不会进 computeMissingRuntimes 的输入,故不必列入。
44
+ */
45
+ exports.SYNC_CORE_REGISTERED_RUNTIMES = [
46
+ '@tarojs/runtime',
47
+ '@tarojs/shared',
48
+ '@tarojs/plugin-platform-weapp/dist/runtime',
49
+ ];
50
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared-runtime/constants.ts"],"names":[],"mappings":";AAAA,0BAA0B;;;AAE1B;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG,CAAC,CAAA;AAEvC;;;GAGG;AACU,QAAA,mBAAmB,GAAG,oBAAoB,8BAAsB,IAAI,CAAA;AAEjF;;;GAGG;AACU,QAAA,qBAAqB,GAAG,kBAAkB,CAAA;AAEvD;;;GAGG;AACU,QAAA,iBAAiB,GAAG,iBAAiB,8BAAsB,EAAE,CAAA;AAE1E,6DAA6D;AAChD,QAAA,0BAA0B,GAAG,gBAAgB,CAAA;AAE1D;;;;GAIG;AACU,QAAA,QAAQ,GAAG,QAAQ,CAAA;AAEhC;;;;;;;;;GASG;AACU,QAAA,6BAA6B,GAAsB;IAC9D,iBAAiB;IACjB,gBAAgB;IAChB,4CAA4C;CAC7C,CAAA"}
@@ -0,0 +1,102 @@
1
+ /* global __TARO_GLOBAL_OBJECT__, __TARO_SHARED_GLOBAL__, __TARO_SHARED_ASYNC_REQUEST__, __TARO_RUNTIME_VERSION__ */
2
+ /**
3
+ * 共享运行时(split 模式) · 同步核(sync-core)入口
4
+ *
5
+ * 随业务包,在业务 app.js 顶层被同步 require。职责:
6
+ * 1. 同步填「页面注册必需」的真身:@tarojs/runtime + @tarojs/shared + 平台 runtime
7
+ * 2. react 本体进同步核(业务 app.js 顶层 `class App extends React.Component` 需它同步就位)
8
+ * 3. 为异步才到的包预放占位对象(react-dom/framework/taro),真身到达后原地 mutate 同一对象
9
+ * 4. 装 Current.app 占位 shim(app-shim)
10
+ * 5. require.async 拉 shared-async 子包,到达后激活真身
11
+ *
12
+ * 多业务包共享(共享运行时核心价值场景):同一宿主小程序可集成多个独立编译的 Taro 业务包,
13
+ * 各业务包 app.js 顶层都会 require 本文件(每包产物 outputDir 根各一份,模块 CJS 缓存作用域
14
+ * 仅限本包,跨包不共享)。首包 require 时完整执行装占位 + 触发异步核;后续包 require 时通过
15
+ * shared.__syncCoreInstalled 幂等守卫**整体早退**,不重装占位、不重置 Current.app、不重复触发
16
+ * require.async(webpack require.async 有内部缓存亦无副作用)。
17
+ *
18
+ * 架构约束——后加载业务包 App 胜出(last-writer):
19
+ * 后续业务包 app.js 顶层 `createReactApp(App_N, ...)` 仍会执行:
20
+ * - 若异步核尚未激活: fw.createReactApp 是占位版,`shared.__appBootstrap` 被覆盖为
21
+ * 最后一包的 App+config,异步核激活时 __activateReal 用最后一包的 App 建 realAppObj。
22
+ * - 若异步核已激活: fw.createReactApp 已被 provider fill 为真身,后续调用直接进 framework
23
+ * 的原生 createReactApp,内部 `Current.app = new_appObj` 无守卫覆盖(见
24
+ * packages/taro-framework-react/src/runtime/connect.ts:434)。
25
+ * 此语义**与 Taro 单份 runtime 内 framework createReactApp 原生行为一致**——不是共享运行时
26
+ * 引入的新约束,而是保持与非共享模式的语义连续。非共享模式下每包各自一份 Current 实例
27
+ * (packages/taro-runtime/src/current.ts:20),跨包不交互;共享模式下多包塞进一份 Current
28
+ * 时,按原生"就近赋值"语义,最后加载的包成为当前活跃 App。
29
+ *
30
+ * Caveat: mount 队列错位。app-shim 的 whenReal 队列缓存了页面 mount/lifecycle,若 A 页面已
31
+ * 入队、B 后加载成为 last-writer,__activateReal 用 B 的 App 建 realAppObj,A 的页面挂到
32
+ * B 的 AppWrapper 上。此矛盾根源是"多包共用一个 AppWrapper",无论 first/last 策略都存在,
33
+ * 真正的解是多 App 隔离(按业务包路由分派 + 多 App 表),属于后续独立扩展。
34
+ *
35
+ * 全局对象 / 全局名 / 异步核请求路径由 DefinePlugin 注入的宏提供(单一来源为 constants.ts + globalObject 配置):
36
+ * __TARO_GLOBAL_OBJECT__ 全局对象标识符(标识符,非字符串),如 wx
37
+ * __TARO_SHARED_GLOBAL__ 全局键名(字符串),如 '__TARO_RT_ASYNC_V1__'
38
+ * __TARO_SHARED_ASYNC_REQUEST__ 异步核 require.async 目标(字符串),如 'shared-async-v1/index'
39
+ * __TARO_RUNTIME_VERSION__ 运行时协议版本号(数值),供异步核做版本一致性校验
40
+ *
41
+ * 注:本文件由 runner 的 provider 子构建打包,react/@tarojs/* 从用户项目 node_modules 解析。
42
+ */
43
+ var GLOBAL_KEY = __TARO_SHARED_GLOBAL__
44
+ var shared = (__TARO_GLOBAL_OBJECT__[GLOBAL_KEY] = __TARO_GLOBAL_OBJECT__[GLOBAL_KEY] || {})
45
+
46
+ // 幂等守卫:首包完整跑;后续包跳过全部装占位/触发异步核逻辑,保护首包已就位的
47
+ // runtime/react 真身、Current.app、__rtVersion 不被覆盖。
48
+ if (!shared.__syncCoreInstalled) {
49
+ shared.__syncCoreInstalled = true
50
+
51
+ // 记录本同步核编译时的运行时协议版本,供异步核校验(避免跨版本错配)。
52
+ // 首包设置,后续包因幂等跳过——多包版本不一时以首包为准。
53
+ shared.__rtVersion = __TARO_RUNTIME_VERSION__
54
+
55
+ // 多包 App 隔离表(共享运行时(split 模式) F5):每个业务包的 realApp 存进 __pkgApps[pkgId],
56
+ // page loader 产物在 onLoad 前查回本包 App,恢复非共享运行时下"页面永远 mount 到本包 App"
57
+ // 的语义(见 packages/taro-webpack5-runner/docs/shared-runtime-scope.md)。
58
+ shared.__pkgApps = shared.__pkgApps || {}
59
+
60
+ // F6 native-components 隔离表:每个 native-comp 业务包的 Entry(App)存进
61
+ // __nativeComponentApps[pkgId],createNativeComponentConfig 里按 pkgId 查回,
62
+ // 与 __pkgApps 平行(pages 与 native-comps 各自独立表,互不影响)。
63
+ shared.__nativeComponentApps = shared.__nativeComponentApps || {}
64
+
65
+ var share = function (name, mod) { if (!shared[name]) shared[name] = mod }
66
+
67
+ // ---- 1. 同步真身 ----
68
+ var runtime = require('@tarojs/runtime')
69
+ var platformRuntime = require('@tarojs/plugin-platform-weapp/dist/runtime')
70
+ // 副作用:mergeReconciler / mergeInternalComponents
71
+ share('@tarojs/runtime', runtime)
72
+ share('@tarojs/shared', require('@tarojs/shared'))
73
+
74
+ share('@tarojs/plugin-platform-weapp/dist/runtime', platformRuntime)
75
+
76
+ var Current = runtime.Current
77
+
78
+ // ---- 2. react 本体进同步核(仅 ~9KB)----
79
+ // 单一真理源:externals.ts::SYNC_REACT_MEMBERS。webpack CommonJS 静态分析要求 require 参数为
80
+ // 字面量字符串(否则模块无法被打包),故此处不能用宏展开或数组遍历——改这三行时必须同步
81
+ // externals.ts 里的 SYNC_REACT_MEMBERS 常量。
82
+ share('react', require('react'))
83
+ share('react/jsx-runtime', require('react/jsx-runtime'))
84
+ // 开发模式下自动 JSX runtime 会请求 react/jsx-dev-runtime,一并同步注册,避免 dev 构建拿到 undefined。
85
+ share('react/jsx-dev-runtime', require('react/jsx-dev-runtime'))
86
+
87
+ // ---- 3+4. framework-runtime / @tarojs/taro / react-dom 占位(带排队与未就位保护)----
88
+ require('./app-shim.js').install(shared, Current)
89
+
90
+ // ---- 5. 触发异步核加载:require.async 拉 shared-async 子包,到达后激活真身 ----
91
+ // 小程序只支持 require.async(注册过的分包路径),不支持 import().then。
92
+ // 该请求由 webpack config 配成 promise-external,编译成 require.async(相对路径)。
93
+ require(__TARO_SHARED_ASYNC_REQUEST__).then(function () {
94
+ if (typeof shared.__activateAsync === 'function') {
95
+ shared.__activateAsync()
96
+ } else {
97
+ console.error('[taro-shared] shared-async 已加载但 __activateAsync 缺失')
98
+ }
99
+ }).catch(function (e) {
100
+ console.error('[taro-shared] require.async shared-async 失败 >>>', (e && e.errMsg) || (e && e.message) || e)
101
+ })
102
+ }