@taro-hmr-compile/plugin-webpack 0.0.1-alpha.7 → 0.0.1-alpha.8
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/dist/compile/hmr-compiler-plugin.d.ts +4 -2
- package/dist/compile/hmr-compiler-plugin.js +11 -14
- package/dist/compile/hmr-compiler-plugin.js.map +1 -1
- package/dist/patch/hmr-patch-plugin.d.ts +6 -5
- package/dist/patch/hmr-patch-plugin.js +33 -179
- package/dist/patch/hmr-patch-plugin.js.map +1 -1
- package/dist/patch/hmr-patch-processor.d.ts +29 -0
- package/dist/patch/hmr-patch-processor.js +105 -0
- package/dist/patch/hmr-patch-processor.js.map +1 -0
- package/dist/patch/types.d.ts +15 -0
- package/dist/patch/types.js +3 -0
- package/dist/patch/types.js.map +1 -0
- package/dist/patch/utils.d.ts +26 -0
- package/dist/patch/utils.js +173 -0
- package/dist/patch/utils.js.map +1 -0
- package/package.json +2 -2
- package/src/compile/hmr-compiler-plugin.ts +18 -16
- package/src/patch/hmr-patch-plugin.ts +42 -168
- package/src/patch/hmr-patch-processor.ts +149 -0
- package/src/patch/types.ts +19 -0
- package/src/patch/utils.ts +174 -0
- package/dist/patch/hmr-patch-manager.d.ts +0 -30
- package/dist/patch/hmr-patch-manager.js +0 -75
- package/dist/patch/hmr-patch-manager.js.map +0 -1
- package/src/patch/hmr-patch-manager.ts +0 -102
|
@@ -11,11 +11,13 @@ export interface HmrCompilerPluginOptions {
|
|
|
11
11
|
styleFilename?: StyleFilename;
|
|
12
12
|
debugNamespaces?: string;
|
|
13
13
|
}
|
|
14
|
+
type CompileRequested = SyncHook<[page: string]>;
|
|
15
|
+
type ChunkModulesRendered = SyncHook<[source: string, isPageChunk: boolean]>;
|
|
14
16
|
export interface HmrCompilerHooks {
|
|
15
|
-
compileRequested:
|
|
17
|
+
compileRequested: CompileRequested;
|
|
16
18
|
}
|
|
17
19
|
export interface HmrCompilationHooks {
|
|
18
|
-
|
|
20
|
+
chunkModulesRendered: ChunkModulesRendered;
|
|
19
21
|
}
|
|
20
22
|
export declare const applyPatchBeforeStartup: (source: Source, request: string) => ConcatSource;
|
|
21
23
|
export declare class HmrCompilerPlugin {
|
|
@@ -29,20 +29,18 @@ class HmrCompilerPlugin {
|
|
|
29
29
|
this.options = options;
|
|
30
30
|
}
|
|
31
31
|
static getCompilerHooks(compiler) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
HmrCompilerPlugin.compilerHooksMap.set(compiler, hooks);
|
|
32
|
+
if (!HmrCompilerPlugin.compilerHooksMap.get(compiler)) {
|
|
33
|
+
const compileRequested = new tapable_1.SyncHook(['page']);
|
|
34
|
+
HmrCompilerPlugin.compilerHooksMap.set(compiler, { compileRequested });
|
|
36
35
|
}
|
|
37
|
-
return
|
|
36
|
+
return HmrCompilerPlugin.compilerHooksMap.get(compiler);
|
|
38
37
|
}
|
|
39
38
|
static getCompilationHooks(compilation) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
HmrCompilerPlugin.compilationHooksMap.set(compilation, hooks);
|
|
39
|
+
if (!HmrCompilerPlugin.compilationHooksMap.get(compilation)) {
|
|
40
|
+
const chunkModulesRendered = new tapable_1.SyncHook(['source', 'isBootstrapChunk']);
|
|
41
|
+
HmrCompilerPlugin.compilationHooksMap.set(compilation, { chunkModulesRendered });
|
|
44
42
|
}
|
|
45
|
-
return
|
|
43
|
+
return HmrCompilerPlugin.compilationHooksMap.get(compilation);
|
|
46
44
|
}
|
|
47
45
|
apply(compiler) {
|
|
48
46
|
this.compiler = compiler;
|
|
@@ -83,10 +81,9 @@ class HmrCompilerPlugin {
|
|
|
83
81
|
// 只修改 Page Chunk 的 JS transport。Webpack 的 ModuleGraph / ChunkGraph 保持不变,
|
|
84
82
|
// 因而 hash、HMR diff 和 hot-update 仍以完整模块图为准。
|
|
85
83
|
javascriptHooks.renderChunk.tap({ name: PLUGIN_NAME, stage: -10000 }, (source, { chunk }) => {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return new webpack_sources_1.RawSource('{}');
|
|
84
|
+
const isBootstrapChunk = isPageChunk(chunk);
|
|
85
|
+
hmrHooks.chunkModulesRendered.call(source.source().toString(), isBootstrapChunk);
|
|
86
|
+
return isBootstrapChunk ? new webpack_sources_1.RawSource('{}') : source;
|
|
90
87
|
});
|
|
91
88
|
javascriptHooks.renderStartup.tap(PLUGIN_NAME, (source, _module, { chunk }) => {
|
|
92
89
|
if (!isPageChunk(chunk))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hmr-compiler-plugin.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-plugin.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,2CAAkD;AAGlD,qCAAgC;AAEhC,qDAAuD;AAEvD,4CAA4C;AAC5C,mDAAoF;AACpF,oCAAoC;AACpC,gCAA2B;AAE3B,MAAM,WAAW,GAAG,SAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAEnD,MAAM,WAAW,GAAG,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"hmr-compiler-plugin.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Compiler } from 'webpack';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
2
|
+
import { HmrPatchProcessorOptions } from "./hmr-patch-processor";
|
|
3
|
+
type HmrPatchPluginOptions = Partial<HmrPatchProcessorOptions>;
|
|
5
4
|
export declare class HmrPatchPlugin {
|
|
6
|
-
private
|
|
7
|
-
private
|
|
5
|
+
private previousHash;
|
|
6
|
+
private initialBuildDone;
|
|
7
|
+
private readonly patchProcessor;
|
|
8
8
|
private readonly emittedAssetSources;
|
|
9
9
|
constructor(options: HmrPatchPluginOptions);
|
|
10
10
|
apply(compiler: Compiler): void;
|
|
@@ -14,3 +14,4 @@ export declare class HmrPatchPlugin {
|
|
|
14
14
|
private emitPatchAsset;
|
|
15
15
|
private reset;
|
|
16
16
|
}
|
|
17
|
+
export {};
|
|
@@ -1,215 +1,68 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.HmrPatchPlugin = void 0;
|
|
40
|
-
const generator_1 = __importDefault(require("@babel/generator"));
|
|
41
|
-
const parser_1 = require("@babel/parser");
|
|
42
|
-
const template_1 = __importDefault(require("@babel/template"));
|
|
43
|
-
const traverse_1 = __importDefault(require("@babel/traverse"));
|
|
44
|
-
const t = __importStar(require("@babel/types"));
|
|
45
4
|
const webpack_sources_1 = require("webpack-sources");
|
|
46
5
|
const constants_1 = require("../constants");
|
|
47
6
|
const hmr_compiler_plugin_1 = require("../compile/hmr-compiler-plugin");
|
|
48
|
-
const hmr_patch_manager_1 = require("./hmr-patch-manager");
|
|
49
7
|
const hmr_patch_runtime_plugin_1 = require("./hmr-patch-runtime-plugin");
|
|
8
|
+
const hmr_patch_processor_1 = require("./hmr-patch-processor");
|
|
50
9
|
const PLUGIN_NAME = 'HmrPatchPlugin';
|
|
51
10
|
const HOT_UPDATE_MANIFEST_SUFFIX = '.hot-update.json';
|
|
52
11
|
const HOT_UPDATE_SCRIPT_SUFFIX = '.hot-update.js';
|
|
53
|
-
const HOT_UPDATE_HASH_PATTERN = /\.([0-9a-f]+)\.hot-update\.json$/i;
|
|
54
12
|
const STYLE_ASSET_PATTERN = /\.(?:css|wxss|acss|ttss|qss|jxss)(?:\.map)?$/i;
|
|
55
13
|
const TEMPLATE_RUNTIME_ASSET_PATTERN = /(?:^|\/)(?:base\.wxml|utils\.wxs)$/i;
|
|
56
|
-
const collectModuleFactories = (source, moduleFactories) => {
|
|
57
|
-
const ast = (0, parser_1.parse)(`(${source})`, { sourceType: 'script' });
|
|
58
|
-
const statement = ast.program.body[0];
|
|
59
|
-
if (!t.isExpressionStatement(statement) || !t.isObjectExpression(statement.expression)) {
|
|
60
|
-
throw new Error('[taro-hmr-compile] Page Chunk 模块段不是对象表达式');
|
|
61
|
-
}
|
|
62
|
-
statement.expression.properties.forEach(property => {
|
|
63
|
-
if (!t.isObjectProperty(property) || !t.isExpression(property.value)) {
|
|
64
|
-
throw new Error('[taro-hmr-compile] Page Chunk 模块对象包含无法识别的属性');
|
|
65
|
-
}
|
|
66
|
-
const { key } = property;
|
|
67
|
-
let moduleId;
|
|
68
|
-
if (t.isStringLiteral(key) || t.isNumericLiteral(key))
|
|
69
|
-
moduleId = String(key.value);
|
|
70
|
-
else if (t.isIdentifier(key) && !property.computed)
|
|
71
|
-
moduleId = key.name;
|
|
72
|
-
else
|
|
73
|
-
throw new Error('[taro-hmr-compile] Page Chunk 模块对象包含无法识别的模块 ID');
|
|
74
|
-
moduleFactories.set(moduleId, property.value);
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
/** 将本轮 Webpack hot-update 产物转换为内部 update 表示。 */
|
|
78
|
-
const createUpdatePatch = (toHash, assets) => {
|
|
79
|
-
const manifestAsset = assets.manifests[0];
|
|
80
|
-
const hashMatch = manifestAsset.name.match(HOT_UPDATE_HASH_PATTERN);
|
|
81
|
-
if (!hashMatch)
|
|
82
|
-
throw new Error(`[taro-hmr-compile] 无法从 ${manifestAsset.name} 提取 HMR 基线 hash`);
|
|
83
|
-
const moduleFactories = new Map();
|
|
84
|
-
assets.scripts.forEach(asset => {
|
|
85
|
-
const ast = (0, parser_1.parse)(asset.source.source().toString(), { sourceType: 'script' });
|
|
86
|
-
(0, traverse_1.default)(ast, {
|
|
87
|
-
CallExpression(nodePath) {
|
|
88
|
-
const { callee } = nodePath.node;
|
|
89
|
-
if (!t.isMemberExpression(callee) || !t.isIdentifier(callee.object, { name: 'wx' }))
|
|
90
|
-
return;
|
|
91
|
-
if (!t.isStringLiteral(callee.property) || !callee.property.value.startsWith('webpackHotUpdate'))
|
|
92
|
-
return;
|
|
93
|
-
const modules = nodePath.node.arguments[1];
|
|
94
|
-
if (!t.isObjectExpression(modules))
|
|
95
|
-
return;
|
|
96
|
-
modules.properties.forEach(property => {
|
|
97
|
-
if (!t.isObjectProperty(property) || !t.isExpression(property.value)) {
|
|
98
|
-
throw new Error('[taro-hmr-compile] HMR 模块对象包含无法识别的属性');
|
|
99
|
-
}
|
|
100
|
-
const { key } = property;
|
|
101
|
-
let moduleId;
|
|
102
|
-
if (t.isStringLiteral(key) || t.isNumericLiteral(key))
|
|
103
|
-
moduleId = String(key.value);
|
|
104
|
-
else if (t.isIdentifier(key) && !property.computed)
|
|
105
|
-
moduleId = key.name;
|
|
106
|
-
else
|
|
107
|
-
throw new Error('[taro-hmr-compile] HMR 模块对象包含无法识别的模块 ID');
|
|
108
|
-
moduleFactories.set(moduleId, property.value);
|
|
109
|
-
});
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
const removedModules = new Set();
|
|
114
|
-
assets.manifests.forEach(asset => {
|
|
115
|
-
var _a;
|
|
116
|
-
const manifest = JSON.parse(asset.source.source().toString());
|
|
117
|
-
(_a = manifest.m) === null || _a === void 0 ? void 0 : _a.forEach(moduleId => removedModules.add(String(moduleId)));
|
|
118
|
-
});
|
|
119
|
-
return {
|
|
120
|
-
type: 'update',
|
|
121
|
-
fromHash: hashMatch[1],
|
|
122
|
-
toHash,
|
|
123
|
-
moduleFactories,
|
|
124
|
-
removedModules: Array.from(removedModules),
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
/** 将内部 Patch 表示序列化为固定 patch.js。 */
|
|
128
|
-
const createPatchAssetSource = (patches) => {
|
|
129
|
-
const buildBootstrapPatchNode = template_1.default.expression(`({
|
|
130
|
-
type: 'bootstrap',
|
|
131
|
-
modules: %%MODULES%%
|
|
132
|
-
})`);
|
|
133
|
-
const buildUpdatePatchNode = template_1.default.expression(`({
|
|
134
|
-
type: 'update',
|
|
135
|
-
fromHash: %%FROM_HASH%%,
|
|
136
|
-
toHash: %%TO_HASH%%,
|
|
137
|
-
modules: %%MODULES%%,
|
|
138
|
-
removedModules: %%REMOVED_MODULES%%
|
|
139
|
-
})`);
|
|
140
|
-
const patchNodes = patches.map(patch => {
|
|
141
|
-
const modules = t.objectExpression(Array.from(patch.moduleFactories, ([moduleId, factory]) => t.objectProperty(t.stringLiteral(moduleId), factory)));
|
|
142
|
-
if (patch.type === 'bootstrap')
|
|
143
|
-
return buildBootstrapPatchNode({ MODULES: modules });
|
|
144
|
-
return buildUpdatePatchNode({
|
|
145
|
-
FROM_HASH: t.stringLiteral(patch.fromHash),
|
|
146
|
-
TO_HASH: t.stringLiteral(patch.toHash),
|
|
147
|
-
MODULES: modules,
|
|
148
|
-
REMOVED_MODULES: t.arrayExpression(patch.removedModules.map(moduleId => t.stringLiteral(moduleId))),
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
const statements = template_1.default.statements('module.exports = %%PATCHES%%;')({ PATCHES: t.arrayExpression(patchNodes) });
|
|
152
|
-
return (0, generator_1.default)(t.program(statements)).code;
|
|
153
|
-
};
|
|
154
14
|
const isPassthroughAsset = (assetName) => {
|
|
155
15
|
return STYLE_ASSET_PATTERN.test(assetName) || TEMPLATE_RUNTIME_ASSET_PATTERN.test(assetName);
|
|
156
16
|
};
|
|
157
17
|
class HmrPatchPlugin {
|
|
158
18
|
constructor(options) {
|
|
159
|
-
|
|
160
|
-
this.
|
|
19
|
+
this.previousHash = '';
|
|
20
|
+
this.initialBuildDone = false;
|
|
161
21
|
this.emittedAssetSources = new Map();
|
|
162
|
-
this.
|
|
22
|
+
this.patchProcessor = new hmr_patch_processor_1.HmrPatchProcessor(options);
|
|
163
23
|
}
|
|
164
24
|
apply(compiler) {
|
|
165
25
|
new hmr_patch_runtime_plugin_1.HmrPatchRuntimePlugin().apply(compiler);
|
|
166
26
|
compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
collectModuleFactories(source, initialPageFactories);
|
|
27
|
+
hmr_compiler_plugin_1.HmrCompilerPlugin.getCompilationHooks(compilation).chunkModulesRendered.tap(PLUGIN_NAME, (source, isBootstrapChunk) => {
|
|
28
|
+
this.patchProcessor.processChunkModules({ compilation, source, isBootstrapChunk });
|
|
170
29
|
});
|
|
171
30
|
// 等 Webpack 生成完整的 hot-update assets 后,再统一转换成固定的 patch.js。
|
|
172
31
|
const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT;
|
|
173
|
-
compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, () =>
|
|
174
|
-
this.processAssets(compilation, initialPageFactories);
|
|
175
|
-
});
|
|
32
|
+
compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, () => this.processAssets(compilation));
|
|
176
33
|
});
|
|
177
34
|
compiler.hooks.afterEmit.tap(PLUGIN_NAME, compilation => {
|
|
178
35
|
const isSuccessful = compilation.errors.length === 0 && Boolean(compilation.hash);
|
|
179
|
-
this.
|
|
36
|
+
this.initialBuildDone = this.initialBuildDone || isSuccessful;
|
|
180
37
|
});
|
|
181
38
|
compiler.hooks.watchClose.tap(PLUGIN_NAME, () => this.reset());
|
|
182
39
|
}
|
|
183
|
-
processAssets(compilation
|
|
184
|
-
|
|
40
|
+
processAssets(compilation) {
|
|
41
|
+
const { previousHash: fromHash, initialBuildDone } = this;
|
|
42
|
+
const { hash: toHash, errors: compilationErrors } = compilation;
|
|
43
|
+
if (!toHash || compilationErrors.length > 0)
|
|
185
44
|
return;
|
|
186
|
-
|
|
187
|
-
if (!
|
|
188
|
-
this.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
45
|
+
// 首次编译完成过滤文件输出
|
|
46
|
+
if (!initialBuildDone) {
|
|
47
|
+
this.patchProcessor.commitBootstrapFactories(compilation);
|
|
48
|
+
compilation.getAssets().forEach(asset => {
|
|
49
|
+
if (!isPassthroughAsset(asset.name))
|
|
50
|
+
return;
|
|
51
|
+
this.emittedAssetSources.set(asset.name, asset.source.source().toString());
|
|
194
52
|
});
|
|
195
|
-
this.
|
|
196
|
-
this.emitPatchAsset(compilation, false);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
const hotUpdateAssets = {
|
|
200
|
-
manifests: originalAssets.filter(asset => asset.name.endsWith(HOT_UPDATE_MANIFEST_SUFFIX)),
|
|
201
|
-
scripts: originalAssets.filter(asset => asset.name.endsWith(HOT_UPDATE_SCRIPT_SUFFIX)),
|
|
202
|
-
};
|
|
203
|
-
if (hotUpdateAssets.manifests.length) {
|
|
204
|
-
this.patchManager.appendUpdate(createUpdatePatch(compilation.hash, hotUpdateAssets));
|
|
205
|
-
this.emitPatchAsset(compilation, true);
|
|
53
|
+
this.previousHash = toHash;
|
|
54
|
+
return this.emitPatchAsset(compilation, false);
|
|
206
55
|
}
|
|
207
|
-
|
|
208
|
-
|
|
56
|
+
const manifests = compilation.getAssets().filter(asset => asset.name.endsWith(HOT_UPDATE_MANIFEST_SUFFIX));
|
|
57
|
+
const scripts = compilation.getAssets().filter(asset => asset.name.endsWith(HOT_UPDATE_SCRIPT_SUFFIX));
|
|
58
|
+
this.patchProcessor.processUpdate({ toHash, fromHash, manifests, scripts });
|
|
59
|
+
this.emitPatchAsset(compilation, true);
|
|
60
|
+
this.removeSupersededAssets(compilation);
|
|
61
|
+
this.previousHash = toHash;
|
|
209
62
|
}
|
|
210
63
|
/** 热更新转换完成后,保留固定 patch 与发生变化的模板、平台样式资产。 */
|
|
211
|
-
removeSupersededAssets(compilation
|
|
212
|
-
|
|
64
|
+
removeSupersededAssets(compilation) {
|
|
65
|
+
compilation.getAssets().forEach(asset => {
|
|
213
66
|
if (asset.name === constants_1.HMR_PATCH_ASSET)
|
|
214
67
|
return;
|
|
215
68
|
if (!isPassthroughAsset(asset.name))
|
|
@@ -222,7 +75,7 @@ class HmrPatchPlugin {
|
|
|
222
75
|
});
|
|
223
76
|
}
|
|
224
77
|
emitPatchAsset(compilation, isHotUpdate) {
|
|
225
|
-
const source = new webpack_sources_1.RawSource(
|
|
78
|
+
const source = new webpack_sources_1.RawSource(this.patchProcessor.generate());
|
|
226
79
|
const assetInfo = { hotModuleReplacement: isHotUpdate };
|
|
227
80
|
if (compilation.getAsset(constants_1.HMR_PATCH_ASSET))
|
|
228
81
|
compilation.updateAsset(constants_1.HMR_PATCH_ASSET, source, assetInfo);
|
|
@@ -230,9 +83,10 @@ class HmrPatchPlugin {
|
|
|
230
83
|
compilation.emitAsset(constants_1.HMR_PATCH_ASSET, source, assetInfo);
|
|
231
84
|
}
|
|
232
85
|
reset() {
|
|
233
|
-
this.
|
|
86
|
+
this.previousHash = '';
|
|
87
|
+
this.initialBuildDone = false;
|
|
234
88
|
this.emittedAssetSources.clear();
|
|
235
|
-
this.
|
|
89
|
+
this.patchProcessor.reset();
|
|
236
90
|
}
|
|
237
91
|
}
|
|
238
92
|
exports.HmrPatchPlugin = HmrPatchPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hmr-patch-plugin.js","sourceRoot":"","sources":["../../src/patch/hmr-patch-plugin.ts"],"names":[],"mappings":"
|
|
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,105 @@
|
|
|
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
|
+
this.recentUpdatePatches.push({ type: 'update', moduleFactories, fromHash, toHash, removedModules });
|
|
54
|
+
const patchHistoryLimit = Math.max(1, (_a = this.opts.patchHistoryLimit) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_HMR_PATCH_HISTORY_LIMIT);
|
|
55
|
+
if (this.recentUpdatePatches.length <= patchHistoryLimit)
|
|
56
|
+
return;
|
|
57
|
+
const [oldestUpdatePatch, secondOldestUpdatePatch, ...rest] = this.recentUpdatePatches;
|
|
58
|
+
const mergedUpdatePatch = (0, utils_1.mergeUpdatePatches)(oldestUpdatePatch, secondOldestUpdatePatch);
|
|
59
|
+
this.recentUpdatePatches = [mergedUpdatePatch, ...rest];
|
|
60
|
+
this.moduleHashesByFullHash.delete(oldestUpdatePatch.toHash);
|
|
61
|
+
}
|
|
62
|
+
processChunkModules(opt) {
|
|
63
|
+
const { hash: fullHash } = opt.compilation;
|
|
64
|
+
const modules = (0, utils_1.parseChunkAsset)(opt.source);
|
|
65
|
+
modules.forEach(moduleFactory => {
|
|
66
|
+
var _a;
|
|
67
|
+
const { moduleId, factory } = moduleFactory;
|
|
68
|
+
if (opt.isBootstrapChunk) {
|
|
69
|
+
const compilationFactories = (_a = this.bootstrapFactoriesByCompilation.get(opt.compilation)) !== null && _a !== void 0 ? _a : new Map();
|
|
70
|
+
compilationFactories.set(moduleId, { moduleId, factory });
|
|
71
|
+
this.bootstrapFactoriesByCompilation.set(opt.compilation, compilationFactories);
|
|
72
|
+
}
|
|
73
|
+
if (!fullHash)
|
|
74
|
+
return;
|
|
75
|
+
const moduleHashes = (() => {
|
|
76
|
+
const hasCurFullHashModuleHashMap = this.moduleHashesByFullHash.has(fullHash);
|
|
77
|
+
if (!hasCurFullHashModuleHashMap)
|
|
78
|
+
this.moduleHashesByFullHash.set(fullHash, new Map());
|
|
79
|
+
return this.moduleHashesByFullHash.get(fullHash);
|
|
80
|
+
})();
|
|
81
|
+
const { code: source } = (0, generator_1.default)(factory, { compact: true, comments: false, minified: true, });
|
|
82
|
+
const factoryHash = (0, crypto_1.createHash)('sha256').update(source).digest('hex');
|
|
83
|
+
moduleHashes.set(moduleId, { moduleId, factoryHash });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
commitBootstrapFactories(compilation) {
|
|
87
|
+
var _a;
|
|
88
|
+
this.bootstrapFactories.clear();
|
|
89
|
+
(_a = this.bootstrapFactoriesByCompilation.get(compilation)) === null || _a === void 0 ? void 0 : _a.forEach(moduleFactory => {
|
|
90
|
+
this.bootstrapFactories.set(moduleFactory.moduleId, moduleFactory);
|
|
91
|
+
});
|
|
92
|
+
this.bootstrapFactoriesByCompilation.delete(compilation);
|
|
93
|
+
}
|
|
94
|
+
generate() {
|
|
95
|
+
const { bootstrapFactories, recentUpdatePatches } = this;
|
|
96
|
+
return (0, utils_1.generatePatchAssetSource)({ bootstrapFactories, recentUpdatePatches });
|
|
97
|
+
}
|
|
98
|
+
reset() {
|
|
99
|
+
this.bootstrapFactories.clear();
|
|
100
|
+
this.moduleHashesByFullHash.clear();
|
|
101
|
+
this.recentUpdatePatches = [];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.HmrPatchProcessor = HmrPatchProcessor;
|
|
105
|
+
//# 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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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
removedModules: string[];
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/patch/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Asset } from "webpack";
|
|
2
|
+
import { ModuleFactory } from "./types";
|
|
3
|
+
import { UpdatePatchSource } from "./types";
|
|
4
|
+
export interface ParseHotUpdateAssetsOptions {
|
|
5
|
+
manifests: Readonly<Asset>[];
|
|
6
|
+
scripts: Readonly<Asset>[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 解析热更新产物
|
|
10
|
+
* @param opt
|
|
11
|
+
*/
|
|
12
|
+
export declare const parseHotUpdateAssets: (opt: ParseHotUpdateAssetsOptions) => {
|
|
13
|
+
moduleFactories: Map<string, ModuleFactory>;
|
|
14
|
+
removedModules: Set<string>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* 解析 chunk 产物
|
|
18
|
+
* @param source
|
|
19
|
+
*/
|
|
20
|
+
export declare const parseChunkAsset: (source: string) => Map<string, ModuleFactory>;
|
|
21
|
+
export declare const mergeUpdatePatches: (basePatch: UpdatePatchSource, nextPatch: UpdatePatchSource) => UpdatePatchSource;
|
|
22
|
+
export interface generatePatchAssetSourceOpts {
|
|
23
|
+
bootstrapFactories: Map<string, ModuleFactory>;
|
|
24
|
+
recentUpdatePatches: UpdatePatchSource[];
|
|
25
|
+
}
|
|
26
|
+
export declare const generatePatchAssetSource: (opt: generatePatchAssetSourceOpts) => string;
|