@taro-hmr-compile/plugin-webpack 0.0.1-alpha.10
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/compile-state.d.ts +3 -0
- package/dist/compile/compile-state.js +21 -0
- package/dist/compile/compile-state.js.map +1 -0
- package/dist/compile/hmr-compiler-loader.d.ts +9 -0
- package/dist/compile/hmr-compiler-loader.js +199 -0
- package/dist/compile/hmr-compiler-loader.js.map +1 -0
- package/dist/compile/hmr-compiler-plugin.d.ts +46 -0
- package/dist/compile/hmr-compiler-plugin.js +173 -0
- package/dist/compile/hmr-compiler-plugin.js.map +1 -0
- package/dist/compile/lazy-compiler-loader.d.ts +18 -0
- package/dist/compile/lazy-compiler-loader.js +38 -0
- package/dist/compile/lazy-compiler-loader.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +3 -0
- package/dist/log.js +11 -0
- package/dist/log.js.map +1 -0
- package/dist/patch/hmr-patch-plugin.d.ts +17 -0
- package/dist/patch/hmr-patch-plugin.js +93 -0
- package/dist/patch/hmr-patch-plugin.js.map +1 -0
- package/dist/patch/hmr-patch-processor.d.ts +30 -0
- package/dist/patch/hmr-patch-processor.js +122 -0
- package/dist/patch/hmr-patch-processor.js.map +1 -0
- package/dist/patch/hmr-patch-runtime-plugin.d.ts +4 -0
- package/dist/patch/hmr-patch-runtime-plugin.js +113 -0
- package/dist/patch/hmr-patch-runtime-plugin.js.map +1 -0
- package/dist/patch/types.d.ts +16 -0
- package/dist/patch/types.js +3 -0
- package/dist/patch/types.js.map +1 -0
- package/dist/patch/utils.d.ts +28 -0
- package/dist/patch/utils.js +179 -0
- package/dist/patch/utils.js.map +1 -0
- package/dist/server/hmr-server-plugin.d.ts +13 -0
- package/dist/server/hmr-server-plugin.js +42 -0
- package/dist/server/hmr-server-plugin.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +25 -0
- package/dist/utils.js.map +1 -0
- package/package.json +58 -0
- package/src/compile/compile-state.ts +15 -0
- package/src/compile/hmr-compiler-loader.ts +177 -0
- package/src/compile/hmr-compiler-plugin.ts +233 -0
- package/src/compile/lazy-compiler-loader.ts +57 -0
- package/src/constants.ts +7 -0
- package/src/index.ts +81 -0
- package/src/log.ts +5 -0
- package/src/patch/hmr-patch-plugin.ts +111 -0
- package/src/patch/hmr-patch-processor.ts +169 -0
- package/src/patch/hmr-patch-runtime-plugin.ts +119 -0
- package/src/patch/types.ts +20 -0
- package/src/patch/utils.ts +179 -0
- package/src/server/hmr-server-plugin.ts +40 -0
- package/src/utils.ts +25 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearCompiledPages = exports.isPageCompiled = exports.markPageCompiled = void 0;
|
|
4
|
+
const compiledPagesByApp = new Map();
|
|
5
|
+
const markPageCompiled = (appPath, page) => {
|
|
6
|
+
var _a;
|
|
7
|
+
const compiledPages = (_a = compiledPagesByApp.get(appPath)) !== null && _a !== void 0 ? _a : new Set();
|
|
8
|
+
compiledPages.add(page);
|
|
9
|
+
compiledPagesByApp.set(appPath, compiledPages);
|
|
10
|
+
};
|
|
11
|
+
exports.markPageCompiled = markPageCompiled;
|
|
12
|
+
const isPageCompiled = (appPath, page) => {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
return (_b = (_a = compiledPagesByApp.get(appPath)) === null || _a === void 0 ? void 0 : _a.has(page)) !== null && _b !== void 0 ? _b : false;
|
|
15
|
+
};
|
|
16
|
+
exports.isPageCompiled = isPageCompiled;
|
|
17
|
+
const clearCompiledPages = (appPath) => {
|
|
18
|
+
compiledPagesByApp.delete(appPath);
|
|
19
|
+
};
|
|
20
|
+
exports.clearCompiledPages = clearCompiledPages;
|
|
21
|
+
//# sourceMappingURL=compile-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile-state.js","sourceRoot":"","sources":["../../src/compile/compile-state.ts"],"names":[],"mappings":";;;AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAA;AAElD,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,EAAE;;IAC9D,MAAM,aAAa,GAAG,MAAA,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,mCAAI,IAAI,GAAG,EAAU,CAAA;IAC1E,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvB,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;AAClD,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B;AAEM,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,EAAE;;IAC5D,OAAO,MAAA,MAAA,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,GAAG,CAAC,IAAI,CAAC,mCAAI,KAAK,CAAA;AAC9D,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B;AAEM,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,EAAE;IAClD,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC,CAAA;AAFY,QAAA,kBAAkB,sBAE9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LoaderDefinitionFunction } from 'webpack';
|
|
2
|
+
export declare const injectAppHmrRuntime: (source: string, debugNamespaces?: string) => string;
|
|
3
|
+
export declare const transformPageConfig: (source: string, sourceFileName?: string) => string;
|
|
4
|
+
interface LoaderOptions {
|
|
5
|
+
miniType: 'PAGE' | 'ENTRY';
|
|
6
|
+
debugNamespaces?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const hmrCompilerLoader: LoaderDefinitionFunction<LoaderOptions>;
|
|
9
|
+
export default hmrCompilerLoader;
|
|
@@ -0,0 +1,199 @@
|
|
|
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.transformPageConfig = exports.injectAppHmrRuntime = void 0;
|
|
40
|
+
const generator_1 = __importDefault(require("@babel/generator"));
|
|
41
|
+
const parser = __importStar(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
|
+
const webpack_1 = __importDefault(require("webpack"));
|
|
46
|
+
const CREATE_PAGE_CONFIG = 'createPageConfig';
|
|
47
|
+
const WITH_HMR_PAGE_CONFIG = 'withHmrPageConfig';
|
|
48
|
+
const TARO_RUNTIME_REQUEST = '@tarojs/runtime';
|
|
49
|
+
const LOG_REQUEST = require.resolve('../log');
|
|
50
|
+
const CORE_RUNTIME_REQUEST = require.resolve('@taro-hmr-compile/core/runtime');
|
|
51
|
+
const injectAppHmrRuntime = (source, debugNamespaces = '') => {
|
|
52
|
+
const ast = parser.parse(source, { sourceType: 'module' });
|
|
53
|
+
const buildHmrCode = template_1.default.statements(`
|
|
54
|
+
import { updatePatchContext, mergePatches, enableLog as enableHmrCoreLog } from ${JSON.stringify(CORE_RUNTIME_REQUEST)}
|
|
55
|
+
import { log, enableLog as enableHmrWebpackLog } from ${JSON.stringify(LOG_REQUEST)}
|
|
56
|
+
enableHmrCoreLog(${JSON.stringify(debugNamespaces)})
|
|
57
|
+
enableHmrWebpackLog(${JSON.stringify(debugNamespaces)})
|
|
58
|
+
globalThis.log = log.extend('runtime')
|
|
59
|
+
updatePatchContext.initialize(${webpack_1.default.RuntimeGlobals.getFullHash}())
|
|
60
|
+
globalThis.miniHmrApplyPatch = async (patches)=>{
|
|
61
|
+
let transaction
|
|
62
|
+
try {
|
|
63
|
+
const { miniHmr } = __webpack_require__
|
|
64
|
+
const bootstrapPatch = patches.find(patch => patch.type === 'bootstrap')
|
|
65
|
+
const shouldApplyBootstrapPatch = miniHmr.shouldApplyBootstrapPatch(bootstrapPatch)
|
|
66
|
+
const currentHash = ${webpack_1.default.RuntimeGlobals.getFullHash}()
|
|
67
|
+
const updatePatch = mergePatches(currentHash, patches)
|
|
68
|
+
|
|
69
|
+
if (shouldApplyBootstrapPatch) miniHmr.applyBootstrapPatch(bootstrapPatch)
|
|
70
|
+
if (!updatePatch) return
|
|
71
|
+
|
|
72
|
+
transaction = updatePatchContext.beginTransaction({fromHash: currentHash,toHash: updatePatch.toHash})
|
|
73
|
+
await miniHmr.applyUpdatePatch(updatePatch)
|
|
74
|
+
updatePatchContext.completeTransaction(transaction.id)
|
|
75
|
+
} catch (error) {
|
|
76
|
+
if (transaction) updatePatchContext.abortTransaction(transaction.id)
|
|
77
|
+
console.error('[taro-hmr-compile] patch apply failed', error)
|
|
78
|
+
return Promise.resolve()
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
`, { placeholderPattern: false });
|
|
82
|
+
(0, traverse_1.default)(ast, {
|
|
83
|
+
Program(path) {
|
|
84
|
+
const body = path.get('body');
|
|
85
|
+
const hasInjected = body.some(item => item.isImportDeclaration() && t.isStringLiteral(item.node.source, { value: CORE_RUNTIME_REQUEST }));
|
|
86
|
+
if (hasInjected)
|
|
87
|
+
return;
|
|
88
|
+
const nodes = buildHmrCode();
|
|
89
|
+
const lastImport = [...body].reverse().find(item => item.isImportDeclaration());
|
|
90
|
+
if (lastImport)
|
|
91
|
+
lastImport.insertAfter(nodes);
|
|
92
|
+
if (!lastImport)
|
|
93
|
+
path.unshiftContainer('body', nodes);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
return (0, generator_1.default)(ast).code;
|
|
97
|
+
};
|
|
98
|
+
exports.injectAppHmrRuntime = injectAppHmrRuntime;
|
|
99
|
+
const transformPageConfig = (source, sourceFileName) => {
|
|
100
|
+
const ast = parser.parse(source, { sourceType: 'module', plugins: ['typescript', 'jsx'] });
|
|
101
|
+
const hasImportWithHmrPageConfig = (programPath) => {
|
|
102
|
+
return programPath.node.body.some(node => {
|
|
103
|
+
if (!t.isImportDeclaration(node))
|
|
104
|
+
return false;
|
|
105
|
+
if (!t.isStringLiteral(node.source, { value: CORE_RUNTIME_REQUEST }))
|
|
106
|
+
return false;
|
|
107
|
+
return node.specifiers.some(specifier => {
|
|
108
|
+
return t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported, { name: WITH_HMR_PAGE_CONFIG });
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const isHotAcceptCall = (node) => {
|
|
113
|
+
if (!t.isCallExpression(node))
|
|
114
|
+
return false;
|
|
115
|
+
const { callee } = node;
|
|
116
|
+
if (!t.isMemberExpression(callee) || !t.isIdentifier(callee.property, { name: 'accept' }))
|
|
117
|
+
return false;
|
|
118
|
+
const hot = callee.object;
|
|
119
|
+
return t.isMemberExpression(hot) && t.isIdentifier(hot.object, { name: 'module' }) && t.isIdentifier(hot.property, { name: 'hot' });
|
|
120
|
+
};
|
|
121
|
+
const hasHotAccept = (programPath) => {
|
|
122
|
+
return programPath.node.body.some(statement => {
|
|
123
|
+
if (t.isExpressionStatement(statement))
|
|
124
|
+
return isHotAcceptCall(statement.expression);
|
|
125
|
+
if (!t.isIfStatement(statement))
|
|
126
|
+
return false;
|
|
127
|
+
const { consequent } = statement;
|
|
128
|
+
if (t.isExpressionStatement(consequent))
|
|
129
|
+
return isHotAcceptCall(consequent.expression);
|
|
130
|
+
if (!t.isBlockStatement(consequent))
|
|
131
|
+
return false;
|
|
132
|
+
return consequent.body.some(node => t.isExpressionStatement(node) && isHotAcceptCall(node.expression));
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
(0, traverse_1.default)(ast, {
|
|
136
|
+
Program(programPath) {
|
|
137
|
+
// 判断是否存在 createPageConfig 引用
|
|
138
|
+
const createPageConfigBinding = programPath.scope.getBinding(CREATE_PAGE_CONFIG);
|
|
139
|
+
if (!createPageConfigBinding || !createPageConfigBinding.path.isImportSpecifier())
|
|
140
|
+
return;
|
|
141
|
+
// 判断 createPageConfig 引用是否来自 @tarojs/runtime
|
|
142
|
+
const { parentPath: createPageConfigImportDeclaration } = createPageConfigBinding.path;
|
|
143
|
+
if (!t.isImportDeclaration(createPageConfigImportDeclaration.node))
|
|
144
|
+
return;
|
|
145
|
+
if (!t.isStringLiteral(createPageConfigImportDeclaration.node.source, { value: TARO_RUNTIME_REQUEST }))
|
|
146
|
+
return;
|
|
147
|
+
// 判断是否已经注入了 withHmrPageConfig
|
|
148
|
+
if (hasImportWithHmrPageConfig(programPath))
|
|
149
|
+
return;
|
|
150
|
+
// 判断是否存在 withHmrPageConfig 引用
|
|
151
|
+
const hasWithHmrPageConfigBinding = programPath.scope.hasBinding(WITH_HMR_PAGE_CONFIG);
|
|
152
|
+
const shouldInjectHotAccept = !hasHotAccept(programPath);
|
|
153
|
+
// 生成 withHmrPageConfig 的别名
|
|
154
|
+
const wrapperIdentifier = hasWithHmrPageConfigBinding ? programPath.scope.generateUidIdentifier(WITH_HMR_PAGE_CONFIG) : t.identifier(WITH_HMR_PAGE_CONFIG);
|
|
155
|
+
// 生成 runtime import
|
|
156
|
+
const runtimeImport = (() => {
|
|
157
|
+
if (!hasWithHmrPageConfigBinding)
|
|
158
|
+
return template_1.default.statement(`import { ${WITH_HMR_PAGE_CONFIG} } from ${JSON.stringify(CORE_RUNTIME_REQUEST)};`)();
|
|
159
|
+
return template_1.default.statement(`import { ${WITH_HMR_PAGE_CONFIG} as %%WRAPPER%% } from ${JSON.stringify(CORE_RUNTIME_REQUEST)};`)({ WRAPPER: wrapperIdentifier });
|
|
160
|
+
})();
|
|
161
|
+
let transformedPageConfig = false;
|
|
162
|
+
programPath.traverse({
|
|
163
|
+
CallExpression(CallExpressionPath) {
|
|
164
|
+
const { node: CallExpressionNode } = CallExpressionPath;
|
|
165
|
+
if (!t.isIdentifier(CallExpressionNode.callee, { name: CREATE_PAGE_CONFIG }))
|
|
166
|
+
return;
|
|
167
|
+
const [_, pageName] = CallExpressionNode.arguments;
|
|
168
|
+
const wrappedPageConfig = template_1.default.expression(`%%WRAPPER%%(%%PAGE_CONFIG%%, %%PAGE_NAME%%, typeof module !== 'undefined' ? module.hot : undefined)`)({
|
|
169
|
+
WRAPPER: wrapperIdentifier,
|
|
170
|
+
PAGE_CONFIG: CallExpressionNode,
|
|
171
|
+
PAGE_NAME: pageName,
|
|
172
|
+
});
|
|
173
|
+
CallExpressionPath.replaceWith(wrappedPageConfig);
|
|
174
|
+
CallExpressionPath.skip();
|
|
175
|
+
transformedPageConfig = true;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
if (!transformedPageConfig)
|
|
179
|
+
return;
|
|
180
|
+
programPath.unshiftContainer('body', runtimeImport);
|
|
181
|
+
if (shouldInjectHotAccept) {
|
|
182
|
+
programPath.pushContainer('body', template_1.default.statement(`if (typeof module !== 'undefined' && module.hot) module.hot.accept();`)());
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
return (0, generator_1.default)(ast, { sourceMaps: true, sourceFileName }, source).code;
|
|
187
|
+
};
|
|
188
|
+
exports.transformPageConfig = transformPageConfig;
|
|
189
|
+
const hmrCompilerLoader = function (source) {
|
|
190
|
+
var _a;
|
|
191
|
+
const { miniType, debugNamespaces } = this.getOptions();
|
|
192
|
+
if (miniType === 'ENTRY')
|
|
193
|
+
return (0, exports.injectAppHmrRuntime)(source, debugNamespaces);
|
|
194
|
+
if (miniType === 'PAGE')
|
|
195
|
+
return (_a = (0, exports.transformPageConfig)(source, this.resourcePath)) !== null && _a !== void 0 ? _a : source;
|
|
196
|
+
return source;
|
|
197
|
+
};
|
|
198
|
+
exports.default = hmrCompilerLoader;
|
|
199
|
+
//# sourceMappingURL=hmr-compiler-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmr-compiler-loader.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { IPaths } from '@tarojs/service';
|
|
2
|
+
import type { AppConfig } from '@tarojs/taro';
|
|
3
|
+
import { SyncHook } from 'tapable';
|
|
4
|
+
import type { Chunk, Compilation, Compiler } from 'webpack';
|
|
5
|
+
import { ConcatSource } from 'webpack-sources';
|
|
6
|
+
import type { Source } from 'webpack-sources';
|
|
7
|
+
type StyleFilename = NonNullable<Compiler['options']['output']['cssFilename']>;
|
|
8
|
+
export interface HmrCompilerPluginOptions {
|
|
9
|
+
paths: IPaths;
|
|
10
|
+
appConfig: AppConfig;
|
|
11
|
+
styleFilename?: StyleFilename;
|
|
12
|
+
debugNamespaces?: string;
|
|
13
|
+
}
|
|
14
|
+
type CompileRequested = SyncHook<[page: string]>;
|
|
15
|
+
interface ChunkModulesRenderedOptions {
|
|
16
|
+
source: string;
|
|
17
|
+
isBootstrapChunk: boolean;
|
|
18
|
+
chunk: Chunk;
|
|
19
|
+
}
|
|
20
|
+
type ChunkModulesRendered = SyncHook<[options: ChunkModulesRenderedOptions]>;
|
|
21
|
+
export interface HmrCompilerHooks {
|
|
22
|
+
compileRequested: CompileRequested;
|
|
23
|
+
}
|
|
24
|
+
export interface HmrCompilationHooks {
|
|
25
|
+
chunkModulesRendered: ChunkModulesRendered;
|
|
26
|
+
}
|
|
27
|
+
export declare const applyPatchBeforeStartup: (source: Source, request: string) => ConcatSource;
|
|
28
|
+
export declare class HmrCompilerPlugin {
|
|
29
|
+
private static readonly compilerHooksMap;
|
|
30
|
+
private static readonly compilationHooksMap;
|
|
31
|
+
private compiler?;
|
|
32
|
+
private hasCompletedInitialBuild;
|
|
33
|
+
private readonly pendingFiles;
|
|
34
|
+
private readonly rebuildingFiles;
|
|
35
|
+
private readonly options;
|
|
36
|
+
constructor(options: HmrCompilerPluginOptions);
|
|
37
|
+
static getCompilerHooks(compiler: Compiler): HmrCompilerHooks;
|
|
38
|
+
static getCompilationHooks(compilation: Compilation): HmrCompilationHooks;
|
|
39
|
+
apply(compiler: Compiler): void;
|
|
40
|
+
private requestCompile;
|
|
41
|
+
private isPageChunk;
|
|
42
|
+
/** PageShell 不包含真实页面的样式依赖,为缺失的页面样式补充空资产。 */
|
|
43
|
+
private emitMissingPageStyleAssets;
|
|
44
|
+
private reset;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,173 @@
|
|
|
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.HmrCompilerPlugin = exports.applyPatchBeforeStartup = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const helper_1 = require("@tarojs/helper");
|
|
9
|
+
const tapable_1 = require("tapable");
|
|
10
|
+
const webpack_sources_1 = require("webpack-sources");
|
|
11
|
+
const constants_1 = require("../constants");
|
|
12
|
+
const compile_state_1 = require("./compile-state");
|
|
13
|
+
const utils_1 = require("../utils");
|
|
14
|
+
const log_1 = require("../log");
|
|
15
|
+
const compilerLog = log_1.log.extend('HmrCompilerPlugin');
|
|
16
|
+
const PLUGIN_NAME = 'HmrCompilerPlugin';
|
|
17
|
+
const applyPatchBeforeStartup = (source, request) => {
|
|
18
|
+
const patchRequest = JSON.stringify(`${request}.js`);
|
|
19
|
+
return new webpack_sources_1.ConcatSource(`globalThis.miniHmrApplyPatch(require(${patchRequest}));\n`, source);
|
|
20
|
+
};
|
|
21
|
+
exports.applyPatchBeforeStartup = applyPatchBeforeStartup;
|
|
22
|
+
class HmrCompilerPlugin {
|
|
23
|
+
constructor(options) {
|
|
24
|
+
this.hasCompletedInitialBuild = false;
|
|
25
|
+
// 页面编译请求可能在任意时刻到达。先排队到下一轮 watchRun,避免与正在执行的编译相互覆盖。
|
|
26
|
+
this.pendingFiles = new Set();
|
|
27
|
+
// 当前编译批次的文件快照。与 pendingFiles 分离,确保编译期间新到达的请求留给下一批处理。
|
|
28
|
+
this.rebuildingFiles = new Set();
|
|
29
|
+
this.options = options;
|
|
30
|
+
}
|
|
31
|
+
static getCompilerHooks(compiler) {
|
|
32
|
+
if (!HmrCompilerPlugin.compilerHooksMap.get(compiler)) {
|
|
33
|
+
const compileRequested = new tapable_1.SyncHook(['page']);
|
|
34
|
+
HmrCompilerPlugin.compilerHooksMap.set(compiler, { compileRequested });
|
|
35
|
+
}
|
|
36
|
+
return HmrCompilerPlugin.compilerHooksMap.get(compiler);
|
|
37
|
+
}
|
|
38
|
+
static getCompilationHooks(compilation) {
|
|
39
|
+
if (!HmrCompilerPlugin.compilationHooksMap.get(compilation)) {
|
|
40
|
+
const chunkModulesRendered = new tapable_1.SyncHook(['options']);
|
|
41
|
+
HmrCompilerPlugin.compilationHooksMap.set(compilation, { chunkModulesRendered });
|
|
42
|
+
}
|
|
43
|
+
return HmrCompilerPlugin.compilationHooksMap.get(compilation);
|
|
44
|
+
}
|
|
45
|
+
apply(compiler) {
|
|
46
|
+
this.compiler = compiler;
|
|
47
|
+
HmrCompilerPlugin.getCompilerHooks(compiler).compileRequested.tap(PLUGIN_NAME, page => {
|
|
48
|
+
this.requestCompile(page);
|
|
49
|
+
});
|
|
50
|
+
compiler.hooks.watchRun.tap(PLUGIN_NAME, currentCompiler => {
|
|
51
|
+
var _a;
|
|
52
|
+
if (this.pendingFiles.size === 0)
|
|
53
|
+
return;
|
|
54
|
+
// 页面是否使用 Shell 由内存中的 compile-state 决定,源文件本身没有发生变化。
|
|
55
|
+
// 因此需要把请求显式加入 modifiedFiles,并保存当前批次供 needBuild 强制重建。
|
|
56
|
+
this.rebuildingFiles.clear();
|
|
57
|
+
this.pendingFiles.forEach(file => this.rebuildingFiles.add(file));
|
|
58
|
+
currentCompiler.modifiedFiles = new Set([...((_a = currentCompiler.modifiedFiles) !== null && _a !== void 0 ? _a : []), ...this.pendingFiles]);
|
|
59
|
+
this.pendingFiles.clear();
|
|
60
|
+
});
|
|
61
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
|
|
62
|
+
const pages = new Set((0, utils_1.getAllPages)(this.options.appConfig));
|
|
63
|
+
const isPageChunk = (chunk) => this.isPageChunk(compilation, pages, chunk);
|
|
64
|
+
const hmrHooks = HmrCompilerPlugin.getCompilationHooks(compilation);
|
|
65
|
+
const javascriptHooks = compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation);
|
|
66
|
+
const HMR_COMPILER_LOADER = require.resolve('./hmr-compiler-loader');
|
|
67
|
+
const TARO_LOADER = '@tarojs/taro-loader';
|
|
68
|
+
// 尽量晚执行
|
|
69
|
+
compiler.webpack.NormalModule.getCompilationHooks(compilation).loader.tap({ name: PLUGIN_NAME, stage: 10000 }, (_loaderContext, normalModule) => {
|
|
70
|
+
if (!normalModule.miniType)
|
|
71
|
+
return;
|
|
72
|
+
if (normalModule.loaders.some(item => item.loader === HMR_COMPILER_LOADER))
|
|
73
|
+
return;
|
|
74
|
+
const taroLoaderIndex = normalModule.loaders.findIndex(item => item.loader.replace(/\\/g, '/').includes(TARO_LOADER));
|
|
75
|
+
if (taroLoaderIndex < 0)
|
|
76
|
+
return;
|
|
77
|
+
const loaderOptions = { miniType: normalModule.miniType, debugNamespaces: this.options.debugNamespaces };
|
|
78
|
+
// Loader 从右向左执行;插到 taro-loader 左侧才能处理它生成的入口注册代码。
|
|
79
|
+
normalModule.loaders.splice(taroLoaderIndex, 0, { loader: HMR_COMPILER_LOADER, options: loaderOptions });
|
|
80
|
+
});
|
|
81
|
+
// 只修改 Page Chunk 的 JS transport。Webpack 的 ModuleGraph / ChunkGraph 保持不变,
|
|
82
|
+
// 因而 hash、HMR diff 和 hot-update 仍以完整模块图为准。
|
|
83
|
+
javascriptHooks.renderChunk.tap({ name: PLUGIN_NAME, stage: -10000 }, (source, { chunk }) => {
|
|
84
|
+
const isBootstrapChunk = isPageChunk(chunk);
|
|
85
|
+
hmrHooks.chunkModulesRendered.call({ source: source.source().toString(), isBootstrapChunk, chunk });
|
|
86
|
+
return isBootstrapChunk ? new webpack_sources_1.RawSource('{}') : source;
|
|
87
|
+
});
|
|
88
|
+
javascriptHooks.renderStartup.tap(PLUGIN_NAME, (source, _module, { chunk }) => {
|
|
89
|
+
if (!isPageChunk(chunk))
|
|
90
|
+
return source;
|
|
91
|
+
const filenameTemplate = compiler.webpack.javascript.JavascriptModulesPlugin
|
|
92
|
+
.getChunkFilenameTemplate(chunk, compilation.outputOptions);
|
|
93
|
+
const assetName = compilation.getPath(filenameTemplate, {
|
|
94
|
+
chunk,
|
|
95
|
+
contentHashType: 'javascript',
|
|
96
|
+
hash: compilation.hash,
|
|
97
|
+
});
|
|
98
|
+
const patchModule = constants_1.HMR_PATCH_ASSET.replace(/\.js$/, '');
|
|
99
|
+
const relativePath = path_1.default.posix.relative(path_1.default.posix.dirname(assetName), patchModule);
|
|
100
|
+
const request = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
|
|
101
|
+
// 微信要求 Page() 在当前页面脚本的同步执行阶段完成。bootstrap 会同步补齐工厂,
|
|
102
|
+
// update 继续异步排队,因此这里不能用 Promise.then 包裹 Webpack startup。
|
|
103
|
+
return (0, exports.applyPatchBeforeStartup)(source, request);
|
|
104
|
+
});
|
|
105
|
+
compiler.webpack.NormalModule.getCompilationHooks(compilation).needBuild.tapAsync(PLUGIN_NAME, (module, _context, callback) => {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
const [resourcePath] = (_b = (_a = module.resource) === null || _a === void 0 ? void 0 : _a.split('?')) !== null && _b !== void 0 ? _b : [];
|
|
108
|
+
// 绕过 Webpack 的模块缓存,让 loader 根据最新 compile-state 将页面 Shell 替换为真实页面。
|
|
109
|
+
if (resourcePath && this.rebuildingFiles.has(resourcePath))
|
|
110
|
+
return callback(null, true);
|
|
111
|
+
callback();
|
|
112
|
+
});
|
|
113
|
+
const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT;
|
|
114
|
+
compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, () => {
|
|
115
|
+
if (!this.hasCompletedInitialBuild && compilation.hash && compilation.errors.length === 0) {
|
|
116
|
+
this.emitMissingPageStyleAssets(compilation);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
compiler.hooks.afterEmit.tap(PLUGIN_NAME, compilation => {
|
|
121
|
+
const isSuccessful = compilation.errors.length === 0 && Boolean(compilation.hash);
|
|
122
|
+
this.hasCompletedInitialBuild = this.hasCompletedInitialBuild || isSuccessful;
|
|
123
|
+
});
|
|
124
|
+
// 当前批次完成后释放快照;编译期间新进入 pendingFiles 的请求不会被清理。
|
|
125
|
+
compiler.hooks.done.tap(PLUGIN_NAME, () => this.rebuildingFiles.clear());
|
|
126
|
+
compiler.hooks.watchClose.tap(PLUGIN_NAME, () => this.reset());
|
|
127
|
+
}
|
|
128
|
+
requestCompile(page) {
|
|
129
|
+
var _a, _b;
|
|
130
|
+
try {
|
|
131
|
+
if ((0, compile_state_1.isPageCompiled)(this.options.paths.appPath, page))
|
|
132
|
+
return;
|
|
133
|
+
// loader 在下一轮构建中读取该状态;必须先标记,再触发 watch invalidation。
|
|
134
|
+
compilerLog('start compile %s', page);
|
|
135
|
+
(0, compile_state_1.markPageCompiled)(this.options.paths.appPath, page);
|
|
136
|
+
this.pendingFiles.add((0, helper_1.resolveMainFilePath)(path_1.default.resolve(this.options.paths.sourcePath, page)));
|
|
137
|
+
(_b = (_a = this.compiler) === null || _a === void 0 ? void 0 : _a.watching) === null || _b === void 0 ? void 0 : _b.invalidate();
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('[taro-hmr-compile] 页面编译触发失败', error);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
isPageChunk(compilation, pages, chunk) {
|
|
144
|
+
if (chunk.name && pages.has(chunk.name))
|
|
145
|
+
return true;
|
|
146
|
+
return Array.from(pages).some(page => { var _a; return ((_a = compilation.entrypoints.get(page)) === null || _a === void 0 ? void 0 : _a.getEntrypointChunk()) === chunk; });
|
|
147
|
+
}
|
|
148
|
+
/** PageShell 不包含真实页面的样式依赖,为缺失的页面样式补充空资产。 */
|
|
149
|
+
emitMissingPageStyleAssets(compilation) {
|
|
150
|
+
const { appConfig, styleFilename } = this.options;
|
|
151
|
+
if (!styleFilename)
|
|
152
|
+
return;
|
|
153
|
+
(0, utils_1.getAllPages)(appConfig).forEach(page => {
|
|
154
|
+
var _a;
|
|
155
|
+
const chunk = (_a = compilation.entrypoints.get(page)) === null || _a === void 0 ? void 0 : _a.getEntrypointChunk();
|
|
156
|
+
if (!chunk)
|
|
157
|
+
return;
|
|
158
|
+
const assetName = compilation.getPath(styleFilename, { chunk, contentHashType: 'css/mini-extract' });
|
|
159
|
+
if (!compilation.getAsset(assetName))
|
|
160
|
+
compilation.emitAsset(assetName, new webpack_sources_1.RawSource(''));
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
reset() {
|
|
164
|
+
(0, compile_state_1.clearCompiledPages)(this.options.paths.appPath);
|
|
165
|
+
this.hasCompletedInitialBuild = false;
|
|
166
|
+
this.rebuildingFiles.clear();
|
|
167
|
+
this.pendingFiles.clear();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.HmrCompilerPlugin = HmrCompilerPlugin;
|
|
171
|
+
HmrCompilerPlugin.compilerHooksMap = new WeakMap();
|
|
172
|
+
HmrCompilerPlugin.compilationHooksMap = new WeakMap();
|
|
173
|
+
//# sourceMappingURL=hmr-compiler-plugin.js.map
|
|
@@ -0,0 +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;AAkChC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,KAAK,CAAC,CAAA;IACpD,OAAO,IAAI,8BAAY,CACnB,wCAAwC,YAAY,OAAO,EAC3D,MAAM,CACT,CAAA;AACL,CAAC,CAAA;AANY,QAAA,uBAAuB,2BAMnC;AAED,MAAa,iBAAiB;IAiB1B,YAAY,OAAiC;QAVrC,6BAAwB,GAAG,KAAK,CAAA;QAExC,mDAAmD;QAClC,iBAAY,GAAG,IAAI,GAAG,EAAU,CAAA;QAEjD,qDAAqD;QACpC,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAA;QAKhD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAkB;QACtC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,MAAM,gBAAgB,GAAqB,IAAI,kBAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YACjE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,gBAAgB,EAAC,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAA;IAC5D,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,WAAwB;QAC/C,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1D,MAAM,oBAAoB,GAAyB,IAAI,kBAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YAC5E,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAC,oBAAoB,EAAC,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAE,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,QAAkB;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YAClF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE;;YACvD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAM;YAExC,mDAAmD;YACnD,qDAAqD;YACrD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YACjE,eAAe,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAA,eAAe,CAAC,aAAa,mCAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;YACzG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;YACtD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;YAC1D,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;YACjF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;YACnE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;YAE5G,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;YAEpE,MAAM,WAAW,GAAG,qBAAqB,CAAA;YAEzC,QAAQ;YACR,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAM,EAAC,EAAE,CAAC,cAAc,EAAE,YAA8B,EAAE,EAAE;gBACzJ,IAAI,CAAC,YAAY,CAAC,QAAQ;oBAAE,OAAM;gBAElC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC;oBAAE,OAAM;gBAElF,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;gBAErH,IAAI,eAAe,GAAG,CAAC;oBAAE,OAAM;gBAE/B,MAAM,aAAa,GAAG,EAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAC,CAAA;gBACtG,iDAAiD;gBACjD,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,EAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAC,CAAC,CAAA;YAC1G,CAAC,CACJ,CAAA;YAED,yEAAyE;YACzE,2CAA2C;YAC3C,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAM,EAAC,EAAE,CAAC,MAAM,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;gBACrF,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;gBAC3C,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAA;gBACjG,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,2BAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAC1D,CAAC,CAAC,CAAA;YAEF,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE;gBACxE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBAAE,OAAO,MAAM,CAAA;gBAEtC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB;qBACvE,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;gBAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE;oBACpD,KAAK;oBACL,eAAe,EAAE,YAAY;oBAC7B,IAAI,EAAE,WAAW,CAAC,IAAI;iBACzB,CAAC,CAAA;gBACF,MAAM,WAAW,GAAG,2BAAe,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;gBACxD,MAAM,YAAY,GAAG,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAA;gBACpF,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAA;gBAEjF,kDAAkD;gBAClD,yDAAyD;gBACzD,OAAO,IAAA,+BAAuB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;YAEF,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAC7E,WAAW,EACX,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;;gBAC3B,MAAM,CAAC,YAAY,CAAC,GAAG,MAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAA;gBACxD,kEAAkE;gBAClE,IAAI,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;oBAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACvF,QAAQ,EAAE,CAAA;YACd,CAAC,CACJ,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAA;YACtE,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAC,EAAE,GAAG,EAAE;gBACjE,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxF,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAA;gBAChD,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;YACpD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACjF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,IAAI,YAAY,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,6CAA6C;QAC7C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAA;QAExE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAClE,CAAC;IAEO,cAAc,CAAC,IAAY;;QAC/B,IAAI,CAAC;YACD,IAAI,IAAA,8BAAc,EAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;gBAAE,OAAM;YAC5D,oDAAoD;YACpD,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YACrC,IAAA,gCAAgB,EAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAA,4BAAmB,EAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7F,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,QAAQ,0CAAE,UAAU,EAAE,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;QACvD,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,WAAwB,EAAE,KAAkB,EAAE,KAAY;QAC1E,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,kBAAkB,EAAE,MAAK,KAAK,CAAA,EAAA,CAAC,CAAA;IAC5G,CAAC;IAED,4CAA4C;IACpC,0BAA0B,CAAC,WAAwB;QACvD,MAAM,EAAC,SAAS,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/C,IAAI,CAAC,aAAa;YAAE,OAAM;QAE1B,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;YAClC,MAAM,KAAK,GAAG,MAAA,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,kBAAkB,EAAE,CAAA;YACrE,IAAI,CAAC,KAAK;gBAAE,OAAM;YAElB,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAC,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAC,CAAC,CAAA;YAClG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,2BAAS,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,KAAK;QACT,IAAA,kCAAkB,EAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9C,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;QACrC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;;AA9KL,8CA+KC;AA9K2B,kCAAgB,GAAG,IAAI,OAAO,EAA8B,AAA5C,CAA4C;AAE5D,qCAAmB,GAAG,IAAI,OAAO,EAAoC,AAAlD,CAAkD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LoaderDefinitionFunction } from 'webpack';
|
|
2
|
+
import type { AppConfig } from "@tarojs/taro";
|
|
3
|
+
interface CreateShellOpt {
|
|
4
|
+
page: string;
|
|
5
|
+
framework: 'react';
|
|
6
|
+
compileUrl: string;
|
|
7
|
+
memo: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const createReactShell: (opt: CreateShellOpt) => string;
|
|
10
|
+
interface LoaderOptions {
|
|
11
|
+
appPath: string;
|
|
12
|
+
sourcePath: string;
|
|
13
|
+
appConfig: AppConfig;
|
|
14
|
+
framework: 'react';
|
|
15
|
+
compileUrl: string;
|
|
16
|
+
}
|
|
17
|
+
declare const lazyCompilerLoader: LoaderDefinitionFunction<LoaderOptions>;
|
|
18
|
+
export default lazyCompilerLoader;
|
|
@@ -0,0 +1,38 @@
|
|
|
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.createReactShell = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
const compile_state_1 = require("./compile-state");
|
|
10
|
+
const createReactShell = (opt) => {
|
|
11
|
+
const { page, compileUrl, memo } = opt;
|
|
12
|
+
return `
|
|
13
|
+
import { PageShell } from ${JSON.stringify(require.resolve('@taro-hmr-compile/core/runtime'))}
|
|
14
|
+
${memo ? "import React from 'react'" : ''}
|
|
15
|
+
const Page = () => <PageShell page={${JSON.stringify(page)}} compileUrl={${JSON.stringify(compileUrl)}}/>
|
|
16
|
+
export default ${memo ? 'React.memo(Page)' : 'Page'}
|
|
17
|
+
`;
|
|
18
|
+
};
|
|
19
|
+
exports.createReactShell = createReactShell;
|
|
20
|
+
const createShell = (opt) => {
|
|
21
|
+
if (opt.framework === 'react')
|
|
22
|
+
return (0, exports.createReactShell)(opt);
|
|
23
|
+
throw new Error(`unsupported framework: ${opt.framework}`);
|
|
24
|
+
};
|
|
25
|
+
const isMemoPage = (source) => {
|
|
26
|
+
return /\bexport\s+default\s+(?:(?:React\.)?memo|observer)\s*\(/.test(source);
|
|
27
|
+
};
|
|
28
|
+
const lazyCompilerLoader = function (source) {
|
|
29
|
+
const { appPath, framework, appConfig, sourcePath, compileUrl } = this.getOptions();
|
|
30
|
+
const { dir: resourceDir, name: resourceName } = path_1.default.parse(path_1.default.relative(sourcePath, this.resourcePath));
|
|
31
|
+
const resourcePath = path_1.default.join(resourceDir, resourceName);
|
|
32
|
+
const isPageEntry = (0, utils_1.getAllPages)(appConfig).includes(resourcePath);
|
|
33
|
+
if (!isPageEntry || (0, compile_state_1.isPageCompiled)(appPath, resourcePath))
|
|
34
|
+
return source;
|
|
35
|
+
return createShell({ page: resourcePath, framework, compileUrl, memo: isMemoPage(source) });
|
|
36
|
+
};
|
|
37
|
+
exports.default = lazyCompilerLoader;
|
|
38
|
+
//# sourceMappingURL=lazy-compiler-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-compiler-loader.js","sourceRoot":"","sources":["../../src/compile/lazy-compiler-loader.ts"],"names":[],"mappings":";;;;;;AACA,gDAAwB;AACxB,oCAAoC;AACpC,mDAA8C;AAWvC,MAAM,gBAAgB,GAAG,CAAC,GAAmB,EAAE,EAAE;IACpD,MAAM,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,GAAG,GAAG,CAAA;IACpC,OAAO;gCACqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;MAC3F,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE;0CACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;qBACpF,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM;KAClD,CAAA;AACL,CAAC,CAAA;AARY,QAAA,gBAAgB,oBAQ5B;AAED,MAAM,WAAW,GAAG,CAAC,GAAmB,EAAE,EAAE;IACxC,IAAI,GAAG,CAAC,SAAS,KAAK,OAAO;QAAE,OAAO,IAAA,wBAAgB,EAAC,GAAG,CAAC,CAAA;IAC3D,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;IAClC,OAAO,yDAAyD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACjF,CAAC,CAAA;AAWD,MAAM,kBAAkB,GAA4C,UAAU,MAAM;IAChF,MAAM,EAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAEjF,MAAM,EAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAC,GAAG,cAAI,CAAC,KAAK,CAAC,cAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IAEvG,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAEzD,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IAEjE,IAAI,CAAC,WAAW,IAAI,IAAA,8BAAc,EAAC,OAAO,EAAE,YAAY,CAAC;QAAE,OAAO,MAAM,CAAA;IAExE,OAAO,WAAW,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAC,CAAC,CAAA;AAC7F,CAAC,CAAA;AAED,kBAAe,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_DEBUG_NAMESPACES = exports.DEFAULT_HMR_PATCH_HISTORY_LIMIT = exports.HMR_PATCH_ASSET = exports.HMR_OUTPUT_PATH = void 0;
|
|
4
|
+
exports.HMR_OUTPUT_PATH = 'hmr';
|
|
5
|
+
exports.HMR_PATCH_ASSET = `${exports.HMR_OUTPUT_PATH}/patch.js`;
|
|
6
|
+
exports.DEFAULT_HMR_PATCH_HISTORY_LIMIT = 20;
|
|
7
|
+
exports.DEFAULT_DEBUG_NAMESPACES = 'taro-hmr-compile:*';
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,KAAK,CAAA;AAEvB,QAAA,eAAe,GAAG,GAAG,uBAAe,WAAW,CAAA;AAE/C,QAAA,+BAA+B,GAAG,EAAE,CAAA;AAEpC,QAAA,wBAAwB,GAAG,oBAAoB,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IPluginContext } from '@tarojs/service';
|
|
2
|
+
export interface WebpackHmrCompileOpt {
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
patchHistoryLimit: number;
|
|
6
|
+
debug: boolean | string;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: (ctx: IPluginContext, pluginOpts: Partial<WebpackHmrCompileOpt>) => void;
|
|
9
|
+
export default _default;
|