@taro-hmr-compile/plugin-webpack 0.0.1-alpha.7 → 0.0.1-alpha.9

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 (37) hide show
  1. package/dist/compile/hmr-compiler-loader.js +44 -7
  2. package/dist/compile/hmr-compiler-loader.js.map +1 -1
  3. package/dist/compile/hmr-compiler-plugin.d.ts +4 -2
  4. package/dist/compile/hmr-compiler-plugin.js +11 -14
  5. package/dist/compile/hmr-compiler-plugin.js.map +1 -1
  6. package/dist/compile/lazy-compiler-loader.d.ts +1 -0
  7. package/dist/compile/lazy-compiler-loader.js +7 -3
  8. package/dist/compile/lazy-compiler-loader.js.map +1 -1
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/patch/hmr-patch-plugin.d.ts +6 -5
  12. package/dist/patch/hmr-patch-plugin.js +33 -179
  13. package/dist/patch/hmr-patch-plugin.js.map +1 -1
  14. package/dist/patch/hmr-patch-processor.d.ts +29 -0
  15. package/dist/patch/hmr-patch-processor.js +106 -0
  16. package/dist/patch/hmr-patch-processor.js.map +1 -0
  17. package/dist/patch/hmr-patch-runtime-plugin.js +1 -1
  18. package/dist/patch/types.d.ts +16 -0
  19. package/dist/patch/types.js +3 -0
  20. package/dist/patch/types.js.map +1 -0
  21. package/dist/patch/utils.d.ts +28 -0
  22. package/dist/patch/utils.js +179 -0
  23. package/dist/patch/utils.js.map +1 -0
  24. package/package.json +2 -2
  25. package/src/compile/hmr-compiler-loader.ts +43 -7
  26. package/src/compile/hmr-compiler-plugin.ts +18 -16
  27. package/src/compile/lazy-compiler-loader.ts +9 -3
  28. package/src/index.ts +2 -0
  29. package/src/patch/hmr-patch-plugin.ts +42 -168
  30. package/src/patch/hmr-patch-processor.ts +151 -0
  31. package/src/patch/hmr-patch-runtime-plugin.ts +1 -1
  32. package/src/patch/types.ts +20 -0
  33. package/src/patch/utils.ts +179 -0
  34. package/dist/patch/hmr-patch-manager.d.ts +0 -30
  35. package/dist/patch/hmr-patch-manager.js +0 -75
  36. package/dist/patch/hmr-patch-manager.js.map +0 -1
  37. package/src/patch/hmr-patch-manager.ts +0 -102
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-patch-plugin.js","sourceRoot":"","sources":["../../src/patch/hmr-patch-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hmr-patch-plugin.js","sourceRoot":"","sources":["../../src/patch/hmr-patch-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type Compilation } from "webpack";
2
+ import { ParseHotUpdateAssetsOptions } from "./utils";
3
+ interface ProcessChunkModulesOptions {
4
+ source: string;
5
+ compilation: Compilation;
6
+ isBootstrapChunk: boolean;
7
+ }
8
+ export interface HmrPatchProcessorOptions {
9
+ patchHistoryLimit?: number;
10
+ }
11
+ interface ProcessUpdateOptions extends ParseHotUpdateAssetsOptions {
12
+ fromHash: string;
13
+ toHash: string;
14
+ }
15
+ export declare class HmrPatchProcessor {
16
+ private readonly bootstrapFactories;
17
+ private readonly bootstrapFactoriesByCompilation;
18
+ private readonly moduleHashesByFullHash;
19
+ private recentUpdatePatches;
20
+ private readonly opts;
21
+ constructor(opts: Partial<HmrPatchProcessorOptions>);
22
+ private getChangedModuleIdsByFullHash;
23
+ processUpdate(opt: ProcessUpdateOptions): void;
24
+ processChunkModules(opt: ProcessChunkModulesOptions): void;
25
+ commitBootstrapFactories(compilation: Compilation): void;
26
+ generate(): string;
27
+ reset(): void;
28
+ }
29
+ export {};
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HmrPatchProcessor = void 0;
7
+ const generator_1 = __importDefault(require("@babel/generator"));
8
+ const utils_1 = require("./utils");
9
+ const crypto_1 = require("crypto");
10
+ const constants_1 = require("../constants");
11
+ class HmrPatchProcessor {
12
+ constructor(opts) {
13
+ this.bootstrapFactories = new Map();
14
+ this.bootstrapFactoriesByCompilation = new WeakMap();
15
+ this.moduleHashesByFullHash = new Map();
16
+ this.recentUpdatePatches = [];
17
+ this.opts = opts;
18
+ }
19
+ getChangedModuleIdsByFullHash(fromHash, toHash) {
20
+ const fromModuleHashes = this.moduleHashesByFullHash.get(fromHash);
21
+ const toModuleHashes = this.moduleHashesByFullHash.get(toHash);
22
+ // 任一编译缺少 Hash 基线时不做过滤,避免误丢有效的 hot-update 模块。
23
+ if (!fromModuleHashes || !toModuleHashes)
24
+ return;
25
+ // 同时检查前后两次编译的模块,确保新增、修改和删除都能被识别。
26
+ const moduleIds = new Set(fromModuleHashes.keys());
27
+ toModuleHashes.forEach((_, moduleId) => moduleIds.add(moduleId));
28
+ const changedModuleIds = new Set();
29
+ moduleIds.forEach(moduleId => {
30
+ var _a, _b;
31
+ const fromFactoryHash = (_a = fromModuleHashes.get(moduleId)) === null || _a === void 0 ? void 0 : _a.factoryHash;
32
+ const toFactoryHash = (_b = toModuleHashes.get(moduleId)) === null || _b === void 0 ? void 0 : _b.factoryHash;
33
+ if (fromFactoryHash !== toFactoryHash)
34
+ changedModuleIds.add(moduleId);
35
+ });
36
+ return changedModuleIds;
37
+ }
38
+ processUpdate(opt) {
39
+ var _a;
40
+ const { fromHash, toHash } = opt;
41
+ const tempPatchInfo = (0, utils_1.parseHotUpdateAssets)(opt);
42
+ const changedModuleIds = this.getChangedModuleIdsByFullHash(fromHash, toHash);
43
+ const moduleFactories = (() => {
44
+ if (!changedModuleIds)
45
+ return Array.from(tempPatchInfo.moduleFactories.values());
46
+ return Array.from(tempPatchInfo.moduleFactories.values()).filter(item => changedModuleIds.has(item.moduleId));
47
+ })();
48
+ const removedModules = (() => {
49
+ if (!changedModuleIds)
50
+ return Array.from(tempPatchInfo.removedModules.values());
51
+ return Array.from(tempPatchInfo.removedModules.values()).filter(item => changedModuleIds.has(item));
52
+ })();
53
+ const { runtimeModules } = tempPatchInfo;
54
+ this.recentUpdatePatches.push({ type: 'update', moduleFactories, runtimeModules, fromHash, toHash, removedModules });
55
+ const patchHistoryLimit = Math.max(1, (_a = this.opts.patchHistoryLimit) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_HMR_PATCH_HISTORY_LIMIT);
56
+ if (this.recentUpdatePatches.length <= patchHistoryLimit)
57
+ return;
58
+ const [oldestUpdatePatch, secondOldestUpdatePatch, ...rest] = this.recentUpdatePatches;
59
+ const mergedUpdatePatch = (0, utils_1.mergeUpdatePatches)(oldestUpdatePatch, secondOldestUpdatePatch);
60
+ this.recentUpdatePatches = [mergedUpdatePatch, ...rest];
61
+ this.moduleHashesByFullHash.delete(oldestUpdatePatch.toHash);
62
+ }
63
+ processChunkModules(opt) {
64
+ const { hash: fullHash } = opt.compilation;
65
+ const modules = (0, utils_1.parseChunkAsset)(opt.source);
66
+ modules.forEach(moduleFactory => {
67
+ var _a;
68
+ const { moduleId, factory } = moduleFactory;
69
+ if (opt.isBootstrapChunk) {
70
+ const compilationFactories = (_a = this.bootstrapFactoriesByCompilation.get(opt.compilation)) !== null && _a !== void 0 ? _a : new Map();
71
+ compilationFactories.set(moduleId, { moduleId, factory });
72
+ this.bootstrapFactoriesByCompilation.set(opt.compilation, compilationFactories);
73
+ }
74
+ if (!fullHash)
75
+ return;
76
+ const moduleHashes = (() => {
77
+ const hasCurFullHashModuleHashMap = this.moduleHashesByFullHash.has(fullHash);
78
+ if (!hasCurFullHashModuleHashMap)
79
+ this.moduleHashesByFullHash.set(fullHash, new Map());
80
+ return this.moduleHashesByFullHash.get(fullHash);
81
+ })();
82
+ const { code: source } = (0, generator_1.default)(factory, { compact: true, comments: false, minified: true, });
83
+ const factoryHash = (0, crypto_1.createHash)('sha256').update(source).digest('hex');
84
+ moduleHashes.set(moduleId, { moduleId, factoryHash });
85
+ });
86
+ }
87
+ commitBootstrapFactories(compilation) {
88
+ var _a;
89
+ this.bootstrapFactories.clear();
90
+ (_a = this.bootstrapFactoriesByCompilation.get(compilation)) === null || _a === void 0 ? void 0 : _a.forEach(moduleFactory => {
91
+ this.bootstrapFactories.set(moduleFactory.moduleId, moduleFactory);
92
+ });
93
+ this.bootstrapFactoriesByCompilation.delete(compilation);
94
+ }
95
+ generate() {
96
+ const { bootstrapFactories, recentUpdatePatches } = this;
97
+ return (0, utils_1.generatePatchAssetSource)({ bootstrapFactories, recentUpdatePatches });
98
+ }
99
+ reset() {
100
+ this.bootstrapFactories.clear();
101
+ this.moduleHashesByFullHash.clear();
102
+ this.recentUpdatePatches = [];
103
+ }
104
+ }
105
+ exports.HmrPatchProcessor = HmrPatchProcessor;
106
+ //# sourceMappingURL=hmr-patch-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-patch-processor.js","sourceRoot":"","sources":["../../src/patch/hmr-patch-processor.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ ${webpack_1.default.RuntimeGlobals.require}.miniHmr.preparePatch = function(patc
67
67
  currentUpdateChunks = {};
68
68
  currentUpdate = Object.assign({}, patch.modules);
69
69
  currentUpdateRemovedChunks = [];
70
- currentUpdateRuntime = [];
70
+ currentUpdateRuntime = patch.runtimeModules ? patch.runtimeModules.slice() : [];
71
71
 
72
72
  if (patch.removedModules) {
73
73
  patch.removedModules.forEach(function(moduleId) {
@@ -0,0 +1,16 @@
1
+ import type { Expression } from "@babel/types";
2
+ export interface ModuleFactory {
3
+ factory: Expression;
4
+ moduleId: string;
5
+ }
6
+ export interface HotUpdateManifest {
7
+ m?: Array<string | number>;
8
+ }
9
+ export interface UpdatePatchSource {
10
+ type: 'update';
11
+ fromHash: string;
12
+ toHash: string;
13
+ moduleFactories: ModuleFactory[];
14
+ runtimeModules: Expression[];
15
+ removedModules: string[];
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/patch/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import * as t from "@babel/types";
2
+ import { Asset } from "webpack";
3
+ import { ModuleFactory } from "./types";
4
+ import { UpdatePatchSource } from "./types";
5
+ export interface ParseHotUpdateAssetsOptions {
6
+ manifests: Readonly<Asset>[];
7
+ scripts: Readonly<Asset>[];
8
+ }
9
+ /**
10
+ * 解析热更新产物
11
+ * @param opt
12
+ */
13
+ export declare const parseHotUpdateAssets: (opt: ParseHotUpdateAssetsOptions) => {
14
+ moduleFactories: Map<string, ModuleFactory>;
15
+ runtimeModules: t.Expression[];
16
+ removedModules: Set<string>;
17
+ };
18
+ /**
19
+ * 解析 chunk 产物
20
+ * @param source
21
+ */
22
+ export declare const parseChunkAsset: (source: string) => Map<string, ModuleFactory>;
23
+ export declare const mergeUpdatePatches: (basePatch: UpdatePatchSource, nextPatch: UpdatePatchSource) => UpdatePatchSource;
24
+ export interface generatePatchAssetSourceOpts {
25
+ bootstrapFactories: Map<string, ModuleFactory>;
26
+ recentUpdatePatches: UpdatePatchSource[];
27
+ }
28
+ export declare const generatePatchAssetSource: (opt: generatePatchAssetSourceOpts) => string;
@@ -0,0 +1,179 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generatePatchAssetSource = exports.mergeUpdatePatches = exports.parseChunkAsset = exports.parseHotUpdateAssets = void 0;
40
+ const t = __importStar(require("@babel/types"));
41
+ const parser_1 = require("@babel/parser");
42
+ const traverse_1 = __importDefault(require("@babel/traverse"));
43
+ const template_1 = __importDefault(require("@babel/template"));
44
+ const generator_1 = __importDefault(require("@babel/generator"));
45
+ /**
46
+ * 解析模块 Factory
47
+ * @param expression
48
+ */
49
+ const parseModuleFactories = (expression) => {
50
+ const moduleFactories = new Map();
51
+ if (!t.isObjectExpression(expression))
52
+ return moduleFactories.values();
53
+ expression.properties.forEach(property => {
54
+ if (!t.isObjectProperty(property) || !t.isExpression(property.value))
55
+ throw new Error('[taro-hmr-compile] HMR 模块对象包含无法识别的属性');
56
+ const { key, value: factory } = property;
57
+ const moduleId = (() => {
58
+ if (t.isStringLiteral(key) || t.isNumericLiteral(key))
59
+ return String(key.value);
60
+ if (t.isIdentifier(key) && !property.computed)
61
+ return key.name;
62
+ throw new Error('[taro-hmr-compile] Chunk 模块对象包含无法识别的模块 ID');
63
+ })();
64
+ moduleFactories.set(moduleId, { factory, moduleId });
65
+ });
66
+ return moduleFactories.values();
67
+ };
68
+ /**
69
+ * 解析热更新产物
70
+ * @param opt
71
+ */
72
+ const parseHotUpdateAssets = (opt) => {
73
+ const { manifests, scripts } = opt;
74
+ const moduleFactories = new Map();
75
+ const runtimeModules = [];
76
+ scripts.forEach(asset => {
77
+ const ast = (0, parser_1.parse)(asset.source.source().toString(), { sourceType: 'script' });
78
+ (0, traverse_1.default)(ast, {
79
+ CallExpression(nodePath) {
80
+ const { callee } = nodePath.node;
81
+ if (!t.isMemberExpression(callee) || !t.isIdentifier(callee.object, { name: 'wx' }))
82
+ return;
83
+ if (!t.isStringLiteral(callee.property) || !callee.property.value.startsWith('webpackHotUpdate'))
84
+ return;
85
+ const [, modules, runtime] = nodePath.node.arguments;
86
+ if (!t.isObjectExpression(modules))
87
+ return;
88
+ parseModuleFactories(modules).forEach(module => moduleFactories.set(module.moduleId, module));
89
+ if (t.isExpression(runtime))
90
+ runtimeModules.push(runtime);
91
+ },
92
+ });
93
+ });
94
+ const removedModules = new Set();
95
+ manifests.forEach((module) => {
96
+ const manifest = JSON.parse(module.source.source().toString());
97
+ const { m: tempRemoveModules = [] } = manifest;
98
+ tempRemoveModules.forEach(removedModule => removedModules.add(String(removedModule)));
99
+ }, []);
100
+ return { moduleFactories, runtimeModules, removedModules };
101
+ };
102
+ exports.parseHotUpdateAssets = parseHotUpdateAssets;
103
+ /**
104
+ * 解析 chunk 产物
105
+ * @param source
106
+ */
107
+ const parseChunkAsset = (source) => {
108
+ const ast = (0, parser_1.parse)(`(${source})`, { sourceType: 'script' });
109
+ const [statement] = ast.program.body;
110
+ if (!t.isExpressionStatement(statement) || !t.isObjectExpression(statement.expression))
111
+ throw new Error('[taro-hmr-compile] Chunk 模块段不是对象表达式');
112
+ const moduleFactories = new Map();
113
+ parseModuleFactories(statement.expression).forEach(module => moduleFactories.set(module.moduleId, module));
114
+ return moduleFactories;
115
+ };
116
+ exports.parseChunkAsset = parseChunkAsset;
117
+ const mergeUpdatePatches = (basePatch, nextPatch) => {
118
+ if (basePatch.toHash !== nextPatch.fromHash)
119
+ throw new Error(`[taro-hmr-compile] 无法合并不连续的 HMR patch:${basePatch.toHash} !== ${nextPatch.fromHash}`);
120
+ const moduleFactories = new Map(basePatch.moduleFactories.map(moduleFactory => [moduleFactory.moduleId, moduleFactory]));
121
+ const removedModules = new Set(basePatch.removedModules);
122
+ nextPatch.moduleFactories.forEach(moduleFactory => {
123
+ const { moduleId } = moduleFactory;
124
+ moduleFactories.set(moduleId, moduleFactory);
125
+ removedModules.delete(moduleId);
126
+ });
127
+ nextPatch.removedModules.forEach(moduleId => {
128
+ moduleFactories.delete(moduleId);
129
+ removedModules.add(moduleId);
130
+ });
131
+ return {
132
+ type: 'update',
133
+ fromHash: basePatch.fromHash,
134
+ toHash: nextPatch.toHash,
135
+ moduleFactories: [...moduleFactories.values()],
136
+ runtimeModules: [...basePatch.runtimeModules, ...nextPatch.runtimeModules],
137
+ removedModules: [...removedModules],
138
+ };
139
+ };
140
+ exports.mergeUpdatePatches = mergeUpdatePatches;
141
+ const generatePatchAssetSource = (opt) => {
142
+ const { bootstrapFactories, recentUpdatePatches } = opt;
143
+ const buildBootstrapPatch = template_1.default.expression(`({
144
+ type: 'bootstrap',
145
+ modules: MODULES
146
+ })`);
147
+ const buildUpdatePatch = template_1.default.expression(`({
148
+ type: 'update',
149
+ fromHash: "FROM_HASH",
150
+ toHash: "TO_HASH",
151
+ modules: MODULES,
152
+ runtimeModules: RUNTIME_MODULES,
153
+ removedModules: REMOVED_MODULES
154
+ })`);
155
+ const buildPatchAsset = template_1.default.program('module.exports = PATCHES;');
156
+ const bootstrapModules = Array.from(bootstrapFactories.values()).map((moduleFactory) => {
157
+ const { moduleId, factory } = moduleFactory;
158
+ return t.objectProperty(t.stringLiteral(moduleId), factory);
159
+ });
160
+ const patchNodes = [
161
+ buildBootstrapPatch({ MODULES: t.objectExpression(bootstrapModules) }),
162
+ ...recentUpdatePatches.map(patch => {
163
+ const updateModules = patch.moduleFactories.map((moduleFactory) => {
164
+ const { moduleId, factory } = moduleFactory;
165
+ return t.objectProperty(t.stringLiteral(moduleId), factory);
166
+ });
167
+ return buildUpdatePatch({
168
+ FROM_HASH: patch.fromHash,
169
+ TO_HASH: patch.toHash,
170
+ MODULES: t.objectExpression(updateModules),
171
+ RUNTIME_MODULES: t.arrayExpression(patch.runtimeModules),
172
+ REMOVED_MODULES: t.arrayExpression(patch.removedModules.map(moduleId => t.stringLiteral(moduleId))),
173
+ });
174
+ }),
175
+ ];
176
+ return (0, generator_1.default)(buildPatchAsset({ PATCHES: t.arrayExpression(patchNodes) })).code;
177
+ };
178
+ exports.generatePatchAssetSource = generatePatchAssetSource;
179
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patch/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,0CAAoC;AACpC,+DAAuC;AACvC,+DAAuC;AACvC,iEAAyC;AAOzC;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,UAA4B,EAAE,EAAE;IAE1D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAA;IAExD,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC;QAAE,OAAO,eAAe,CAAC,MAAM,EAAE,CAAA;IAEtE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACrC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QAE7H,MAAM,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAC,GAAG,QAAQ,CAAA;QAEtC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC/E,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAA;YAC9D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAChE,CAAC,CAAC,EAAE,CAAA;QAEJ,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,OAAO,eAAe,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC,CAAA;AAQD;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,GAAgC,EAAE,EAAE;IACrE,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,GAAG,GAAG,CAAA;IAEhC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAA;IACxD,MAAM,cAAc,GAAmB,EAAE,CAAA;IAEzC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAEpB,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;QAE3E,IAAA,kBAAQ,EAAC,GAAG,EAAE;YACV,cAAc,CAAC,QAAQ;gBACnB,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAC,IAAI,CAAA;gBAE9B,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;oBAAE,OAAM;gBAEzF,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC;oBAAE,OAAM;gBAExG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAA;gBAEpD,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBAAE,OAAM;gBAE1C,oBAAoB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;gBAC7F,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;oBAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7D,CAAC;SACJ,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;IAExC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAsB,CAAA;QAEnF,MAAM,EAAC,CAAC,EAAE,iBAAiB,GAAG,EAAE,EAAC,GAAG,QAAQ,CAAA;QAE5C,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IACzF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAC,eAAe,EAAE,cAAc,EAAE,cAAc,EAAC,CAAA;AAC5D,CAAC,CAAA;AAxCY,QAAA,oBAAoB,wBAwChC;AAED;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,MAAc,EAA8B,EAAE;IAC1E,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,IAAI,MAAM,GAAG,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;IAExD,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;IAEpC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAE9I,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAA;IAExD,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAE1G,OAAO,eAAe,CAAA;AAC1B,CAAC,CAAA;AAZY,QAAA,eAAe,mBAY3B;AAEM,MAAM,kBAAkB,GAAG,CAAC,SAA4B,EAAE,SAA4B,EAAsB,EAAE;IACjH,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,CAAC,MAAM,QAAQ,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEnJ,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAExH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAExD,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC9C,MAAM,EAAC,QAAQ,EAAC,GAAG,aAAa,CAAA;QAChC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAC5C,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACxC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAChC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,OAAO;QACH,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAC9C,cAAc,EAAE,CAAC,GAAG,SAAS,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,cAAc,CAAC;QAC1E,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC;KACtC,CAAA;AACL,CAAC,CAAA;AA1BY,QAAA,kBAAkB,sBA0B9B;AAOM,MAAM,wBAAwB,GAAG,CAAC,GAAiC,EAAU,EAAE;IAClF,MAAM,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,GAAG,GAAG,CAAA;IACrD,MAAM,mBAAmB,GAAG,kBAAQ,CAAC,UAAU,CAAC;;;OAG7C,CAAC,CAAA;IACJ,MAAM,gBAAgB,GAAG,kBAAQ,CAAC,UAAU,CAAC;;;;;;;OAO1C,CAAC,CAAA;IACJ,MAAM,eAAe,GAAG,kBAAQ,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACrE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;QACnF,MAAM,EAAC,QAAQ,EAAE,OAAO,EAAC,GAAG,aAAa,CAAA;QACzC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IACF,MAAM,UAAU,GAAG;QACf,mBAAmB,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAC,CAAC;QACpE,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;gBAC9D,MAAM,EAAC,QAAQ,EAAE,OAAO,EAAC,GAAG,aAAa,CAAA;gBACzC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;YAC/D,CAAC,CAAC,CAAA;YACF,OAAO,gBAAgB,CAAC;gBACpB,SAAS,EAAE,KAAK,CAAC,QAAQ;gBACzB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,OAAO,EAAE,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC;gBAC1C,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;gBACxD,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;aACtG,CAAC,CAAA;QACN,CAAC,CAAC;KACL,CAAA;IAED,OAAO,IAAA,mBAAS,EAAC,eAAe,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACpF,CAAC,CAAA;AArCY,QAAA,wBAAwB,4BAqCpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taro-hmr-compile/plugin-webpack",
3
- "version": "0.0.1-alpha.7",
3
+ "version": "0.0.1-alpha.9",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -44,7 +44,7 @@
44
44
  "@babel/template": "^7.29.7",
45
45
  "@babel/traverse": "^7.29.8",
46
46
  "@babel/types": "^7.29.8",
47
- "@taro-hmr-compile/core": "0.0.1-alpha.7",
47
+ "@taro-hmr-compile/core": "0.0.1-alpha.9",
48
48
  "debug": "^4.4.3",
49
49
  "tapable": "^2.3.3",
50
50
  "webpack-sources": "^3.5.1"
@@ -22,22 +22,29 @@ export const injectAppHmrRuntime = (source: string, debugNamespaces = '') => {
22
22
  const ast = parser.parse(source, {sourceType: 'module'})
23
23
 
24
24
  const buildHmrCode = template.statements(`
25
- import { hmrState, mergePatches, enableLog as enableHmrCoreLog } from ${JSON.stringify(CORE_RUNTIME_REQUEST)}
25
+ import { updatePatchContext, mergePatches, enableLog as enableHmrCoreLog } from ${JSON.stringify(CORE_RUNTIME_REQUEST)}
26
26
  import { log, enableLog as enableHmrWebpackLog } from ${JSON.stringify(LOG_REQUEST)}
27
27
  enableHmrCoreLog(${JSON.stringify(debugNamespaces)})
28
28
  enableHmrWebpackLog(${JSON.stringify(debugNamespaces)})
29
29
  globalThis.log = log.extend('runtime')
30
+ updatePatchContext.initialize(${webpack.RuntimeGlobals.getFullHash}())
30
31
  globalThis.miniHmrApplyPatch = async (patches)=>{
32
+ let transaction
31
33
  try {
32
34
  const { miniHmr } = __webpack_require__
33
35
  const bootstrapPatch = patches.find(patch => patch.type === 'bootstrap')
36
+ const shouldApplyBootstrapPatch = miniHmr.shouldApplyBootstrapPatch(bootstrapPatch)
37
+ const currentHash = ${webpack.RuntimeGlobals.getFullHash}()
38
+ const updatePatch = mergePatches(currentHash, patches)
34
39
 
35
- if (miniHmr.shouldApplyBootstrapPatch(bootstrapPatch)) miniHmr.applyBootstrapPatch(bootstrapPatch)
40
+ if (shouldApplyBootstrapPatch) miniHmr.applyBootstrapPatch(bootstrapPatch)
41
+ if (!updatePatch) return
36
42
 
37
- const updatePatch = mergePatches(${webpack.RuntimeGlobals.getFullHash}(), patches)
38
- hmrState.setLastFullHash(updatePatch?.toHash ?? ${webpack.RuntimeGlobals.getFullHash}())
43
+ transaction = updatePatchContext.beginTransaction({fromHash: currentHash,toHash: updatePatch.toHash})
39
44
  await miniHmr.applyUpdatePatch(updatePatch)
45
+ updatePatchContext.completeTransaction(transaction.id)
40
46
  } catch (error) {
47
+ if (transaction) updatePatchContext.abortTransaction(transaction.id)
41
48
  console.error('[taro-hmr-compile] patch apply failed', error)
42
49
  return Promise.resolve()
43
50
  }
@@ -75,6 +82,26 @@ export const transformPageConfig = (source: string, sourceFileName?: string) =>
75
82
  })
76
83
  }
77
84
 
85
+ const isHotAcceptCall = (node: t.Node | null | undefined) => {
86
+ if (!t.isCallExpression(node)) return false
87
+ const {callee} = node
88
+ if (!t.isMemberExpression(callee) || !t.isIdentifier(callee.property, {name: 'accept'})) return false
89
+ const hot = callee.object
90
+ return t.isMemberExpression(hot) && t.isIdentifier(hot.object, {name: 'module'}) && t.isIdentifier(hot.property, {name: 'hot'})
91
+ }
92
+
93
+ const hasHotAccept = (programPath: NodePath<t.Program>) => {
94
+ return programPath.node.body.some(statement => {
95
+ if (t.isExpressionStatement(statement)) return isHotAcceptCall(statement.expression)
96
+ if (!t.isIfStatement(statement)) return false
97
+
98
+ const {consequent} = statement
99
+ if (t.isExpressionStatement(consequent)) return isHotAcceptCall(consequent.expression)
100
+ if (!t.isBlockStatement(consequent)) return false
101
+ return consequent.body.some(node => t.isExpressionStatement(node) && isHotAcceptCall(node.expression))
102
+ })
103
+ }
104
+
78
105
  traverse(ast, {
79
106
  Program(programPath) {
80
107
 
@@ -92,6 +119,7 @@ export const transformPageConfig = (source: string, sourceFileName?: string) =>
92
119
 
93
120
  // 判断是否存在 withHmrPageConfig 引用
94
121
  const hasWithHmrPageConfigBinding = programPath.scope.hasBinding(WITH_HMR_PAGE_CONFIG)
122
+ const shouldInjectHotAccept = !hasHotAccept(programPath)
95
123
 
96
124
  // 生成 withHmrPageConfig 的别名
97
125
  const wrapperIdentifier = hasWithHmrPageConfigBinding ? programPath.scope.generateUidIdentifier(WITH_HMR_PAGE_CONFIG) : t.identifier(WITH_HMR_PAGE_CONFIG)
@@ -102,24 +130,32 @@ export const transformPageConfig = (source: string, sourceFileName?: string) =>
102
130
  return template.statement(`import { ${WITH_HMR_PAGE_CONFIG} as %%WRAPPER%% } from ${JSON.stringify(CORE_RUNTIME_REQUEST)};`)({WRAPPER: wrapperIdentifier})
103
131
  })()
104
132
 
133
+ let transformedPageConfig = false
134
+
105
135
  programPath.traverse({
106
136
  CallExpression(CallExpressionPath) {
107
137
  const {node: CallExpressionNode} = CallExpressionPath
108
138
  if (!t.isIdentifier(CallExpressionNode.callee, {name: CREATE_PAGE_CONFIG})) return
109
139
  const [_, pageName] = CallExpressionNode.arguments
110
- const wrappedPageConfig = template.expression(`%%WRAPPER%%(%%PAGE_CONFIG%%, %%PAGE_NAME%%)`)({
140
+ const wrappedPageConfig = template.expression(`%%WRAPPER%%(%%PAGE_CONFIG%%, %%PAGE_NAME%%, typeof module !== 'undefined' ? module.hot : undefined)`)({
111
141
  WRAPPER: wrapperIdentifier,
112
142
  PAGE_CONFIG: CallExpressionNode,
113
143
  PAGE_NAME: pageName,
114
144
  })
115
145
 
116
- if (!hasImportWithHmrPageConfig(programPath)) programPath.unshiftContainer('body', runtimeImport)
117
-
118
146
  CallExpressionPath.replaceWith(wrappedPageConfig)
119
147
  CallExpressionPath.skip()
148
+ transformedPageConfig = true
120
149
  }
121
150
  })
122
151
 
152
+ if (!transformedPageConfig) return
153
+
154
+ programPath.unshiftContainer('body', runtimeImport)
155
+ if (shouldInjectHotAccept) {
156
+ programPath.pushContainer('body', template.statement(`if (typeof module !== 'undefined' && module.hot) module.hot.accept();`)())
157
+ }
158
+
123
159
  },
124
160
  })
125
161
 
@@ -29,12 +29,16 @@ export interface HmrCompilerPluginOptions {
29
29
  debugNamespaces?: string
30
30
  }
31
31
 
32
+ type CompileRequested = SyncHook<[page: string]>
33
+
34
+ type ChunkModulesRendered = SyncHook<[source: string, isPageChunk: boolean]>
35
+
32
36
  export interface HmrCompilerHooks {
33
- compileRequested: SyncHook<[page: string]>
37
+ compileRequested: CompileRequested
34
38
  }
35
39
 
36
40
  export interface HmrCompilationHooks {
37
- pageChunkModules: SyncHook<[source: string]>
41
+ chunkModulesRendered: ChunkModulesRendered
38
42
  }
39
43
 
40
44
  export const applyPatchBeforeStartup = (source: Source, request: string) => {
@@ -67,21 +71,19 @@ export class HmrCompilerPlugin {
67
71
  }
68
72
 
69
73
  static getCompilerHooks(compiler: Compiler): HmrCompilerHooks {
70
- let hooks = HmrCompilerPlugin.compilerHooksMap.get(compiler)
71
- if (!hooks) {
72
- hooks = {compileRequested: new SyncHook(['page'])}
73
- HmrCompilerPlugin.compilerHooksMap.set(compiler, hooks)
74
+ if (!HmrCompilerPlugin.compilerHooksMap.get(compiler)) {
75
+ const compileRequested: CompileRequested = new SyncHook(['page'])
76
+ HmrCompilerPlugin.compilerHooksMap.set(compiler, {compileRequested})
74
77
  }
75
- return hooks
78
+ return HmrCompilerPlugin.compilerHooksMap.get(compiler)!
76
79
  }
77
80
 
78
81
  static getCompilationHooks(compilation: Compilation): HmrCompilationHooks {
79
- let hooks = HmrCompilerPlugin.compilationHooksMap.get(compilation)
80
- if (!hooks) {
81
- hooks = {pageChunkModules: new SyncHook(['source'])}
82
- HmrCompilerPlugin.compilationHooksMap.set(compilation, hooks)
82
+ if (!HmrCompilerPlugin.compilationHooksMap.get(compilation)) {
83
+ const chunkModulesRendered: ChunkModulesRendered = new SyncHook(['source', 'isBootstrapChunk'])
84
+ HmrCompilerPlugin.compilationHooksMap.set(compilation, {chunkModulesRendered})
83
85
  }
84
- return hooks
86
+ return HmrCompilerPlugin.compilationHooksMap.get(compilation)!
85
87
  }
86
88
 
87
89
  apply(compiler: Compiler) {
@@ -124,16 +126,16 @@ export class HmrCompilerPlugin {
124
126
 
125
127
  const loaderOptions = {miniType: normalModule.miniType, debugNamespaces: this.options.debugNamespaces}
126
128
  // Loader 从右向左执行;插到 taro-loader 左侧才能处理它生成的入口注册代码。
127
- normalModule.loaders.splice(taroLoaderIndex, 0, { loader: HMR_COMPILER_LOADER, options: loaderOptions})
129
+ normalModule.loaders.splice(taroLoaderIndex, 0, {loader: HMR_COMPILER_LOADER, options: loaderOptions})
128
130
  },
129
131
  )
130
132
 
131
133
  // 只修改 Page Chunk 的 JS transport。Webpack 的 ModuleGraph / ChunkGraph 保持不变,
132
134
  // 因而 hash、HMR diff 和 hot-update 仍以完整模块图为准。
133
135
  javascriptHooks.renderChunk.tap({name: PLUGIN_NAME, stage: -10_000}, (source, {chunk}) => {
134
- if (!isPageChunk(chunk)) return source
135
- hmrHooks.pageChunkModules.call(source.source().toString())
136
- return new RawSource('{}')
136
+ const isBootstrapChunk = isPageChunk(chunk)
137
+ hmrHooks.chunkModulesRendered.call(source.source().toString(), isBootstrapChunk)
138
+ return isBootstrapChunk ? new RawSource('{}') : source
137
139
  })
138
140
 
139
141
  javascriptHooks.renderStartup.tap(PLUGIN_NAME, (source, _module, {chunk}) => {