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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +101 -0
  2. package/dist/compile/hmr-compiler-loader.js +44 -7
  3. package/dist/compile/hmr-compiler-loader.js.map +1 -1
  4. package/dist/compile/hmr-compiler-plugin.d.ts +7 -7
  5. package/dist/compile/hmr-compiler-plugin.js +2 -29
  6. package/dist/compile/hmr-compiler-plugin.js.map +1 -1
  7. package/dist/compile/hmr-output-plugin.d.ts +28 -0
  8. package/dist/compile/hmr-output-plugin.js +145 -0
  9. package/dist/compile/hmr-output-plugin.js.map +1 -0
  10. package/dist/compile/hmr-style-plugin.d.ts +25 -0
  11. package/dist/compile/hmr-style-plugin.js +53 -0
  12. package/dist/compile/hmr-style-plugin.js.map +1 -0
  13. package/dist/compile/lazy-compiler-loader.d.ts +2 -0
  14. package/dist/compile/lazy-compiler-loader.js +17 -5
  15. package/dist/compile/lazy-compiler-loader.js.map +1 -1
  16. package/dist/constants.d.ts +1 -0
  17. package/dist/constants.js +2 -1
  18. package/dist/constants.js.map +1 -1
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +18 -6
  21. package/dist/index.js.map +1 -1
  22. package/dist/patch/hmr-patch-plugin.d.ts +6 -0
  23. package/dist/patch/hmr-patch-plugin.js +53 -4
  24. package/dist/patch/hmr-patch-plugin.js.map +1 -1
  25. package/dist/patch/hmr-patch-processor.d.ts +2 -1
  26. package/dist/patch/hmr-patch-processor.js +39 -22
  27. package/dist/patch/hmr-patch-processor.js.map +1 -1
  28. package/dist/patch/hmr-patch-runtime-plugin.js +1 -1
  29. package/dist/patch/types.d.ts +1 -0
  30. package/dist/patch/utils.d.ts +2 -0
  31. package/dist/patch/utils.js +11 -5
  32. package/dist/patch/utils.js.map +1 -1
  33. package/package.json +4 -2
  34. package/src/compile/hmr-compiler-loader.ts +43 -7
  35. package/src/compile/hmr-compiler-plugin.ts +9 -34
  36. package/src/compile/hmr-output-plugin.ts +158 -0
  37. package/src/compile/hmr-style-plugin.ts +70 -0
  38. package/src/compile/lazy-compiler-loader.ts +20 -5
  39. package/src/constants.ts +2 -0
  40. package/src/index.ts +23 -9
  41. package/src/patch/hmr-patch-plugin.ts +53 -5
  42. package/src/patch/hmr-patch-processor.ts +48 -28
  43. package/src/patch/hmr-patch-runtime-plugin.ts +1 -1
  44. package/src/patch/types.ts +1 -0
  45. package/src/patch/utils.ts +10 -5
  46. package/src/types/taro-service.d.ts +15 -0
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # @taro-hmr-compile/plugin-webpack
2
+
3
+ Taro React + Webpack 5 微信小程序的页面按需编译与 HMR 插件,负责本地编译服务、页面模块补丁和样式补丁输出。
4
+
5
+ ## ✨ 功能特性
6
+
7
+ - 将未访问的页面入口替换为占位组件,进入页面时触发真实编译。
8
+ - 维护页面编译请求队列,触发 Webpack watch 重建。
9
+ - 收集页面模块工厂与 hot-update 产物,生成 `hmr/patch.js`。
10
+ - 输出 `hmr/patch.wxss`,通过固定样式入口引用。
11
+ - 自动选择可用端口,支持补丁历史上限、日志和按需编译排除项。
12
+
13
+ ## 📦 安装
14
+
15
+ 业务项目可直接使用集成了本插件的 [`@taro-hmr-compile/preset`](../taro-preset/README.md)。需要自行组合时安装:
16
+
17
+ ```bash
18
+ pnpm add -D @taro-hmr-compile/plugin-webpack @taro-hmr-compile/react-refresh
19
+ ```
20
+
21
+ ## ⚙️ 配置
22
+
23
+ 本插件负责 HMR 编译和补丁传输;React Refresh 需要配合对应编译插件,按以下顺序注册:
24
+
25
+ ```ts
26
+ import { defineConfig } from '@tarojs/cli'
27
+
28
+ export default defineConfig<'webpack5'>({
29
+ framework: 'react',
30
+ mini: {
31
+ debugReact: true,
32
+ },
33
+ compiler: {
34
+ type: 'webpack5',
35
+ prebundle: { enable: false },
36
+ },
37
+ plugins: [
38
+ '@taro-hmr-compile/react-refresh/compiler',
39
+ ['@taro-hmr-compile/plugin-webpack', {
40
+ host: '127.0.0.1',
41
+ port: 8080,
42
+ patchHistoryLimit: 20,
43
+ debug: true,
44
+ lazyCompileExclude: ['pages/index/index', 'pages/dashboard/'],
45
+ }],
46
+ ],
47
+ })
48
+ ```
49
+
50
+ 需要开启 `mini.debugReact: true`;建议关闭预打包,与仓库示例保持一致。在微信开发者工具的 `project.config.json` 中设置 `setting.urlCheck: false` 和 `setting.compileHotReLoad: true`,然后运行:
51
+
52
+ ```bash
53
+ pnpm exec taro build --type weapp --watch
54
+ ```
55
+
56
+ 仅在 `--watch` 模式下启用。不要再同时注册 `@taro-hmr-compile/preset`。
57
+
58
+ ## 📋 配置选项
59
+
60
+ 插件接受 `Partial<WebpackHmrCompileOpt>`,所有字段均可省略。
61
+
62
+ | 选项 | 类型 | 默认值 | 说明 |
63
+ | --- | --- | --- | --- |
64
+ | `host` | `string` | `'127.0.0.1'` | HTTP 服务监听地址,也用于生成页面请求 URL |
65
+ | `port` | `number` | `8080` | 首选端口;不可用时向后寻找可用端口并输出提示 |
66
+ | `patchHistoryLimit` | `number` | `20` | 更新补丁记录数上限;超过后合并最早的记录,最小按 `1` 处理 |
67
+ | `debug` | `boolean \| string` | `false` | `true` 启用 `taro-hmr-compile:*` 日志,字符串指定 debug 命名空间 |
68
+ | `lazyCompileExclude` | `string[]` | `[]` | 排除按需编译的页面,首次构建直接编译,仍参与热更新 |
69
+
70
+ ### 页面排除规则
71
+
72
+ - 相对于 `sourceRoot`,不含 `.tsx` 等扩展名。
73
+ - `pages/index/index` 精确匹配页面;开头 `/` 可省略。
74
+ - `pages/dashboard/` 匹配该目录下的页面,注意保留末尾 `/`。
75
+ - 默认没有排除项,首屏同样会先显示 `PageShell`。
76
+
77
+ ## 📝 工作原理
78
+
79
+ 1. 从应用配置中收集主包和分包页面,对未编译页面输出 `PageShell`。
80
+ 2. 占位组件向本地服务发送 `POST /compile`,请求体为 `{ "page": "pages/detail/index" }`。服务返回 `202` 表示请求已接收,编译在后续 watch 批次中完成。
81
+ 3. 插件标记页面编译状态并强制重建对应入口,替换占位组件。同一 watch 会话中已编译页面继续使用真实源码。
82
+ 4. 从页面 chunk 收集模块工厂,在页面启动前同步补齐;将后续模块变化生成更新补丁,按队列应用。
83
+ 5. 更新补丁历史超出限制时合并旧记录,全局样式通过独立补丁资产输出。
84
+
85
+ ## ⚠️ 注意事项
86
+
87
+ - 当前面向 React + Webpack 5 微信小程序;非 React 框架在页面占位转换时会报错。
88
+ - 插件以 `isWatch` 判断是否启用,其他平台的 watch 构建需自行条件注册。
89
+ - 插件会关闭 `optimization.usedExports`,并设置 `output.clean = false` 以配合开发期补丁输出。
90
+ - `host` 必须可被客户端访问。默认适合同机开发者工具,真机调试需单独验证;不要将 `0.0.0.0` 用作客户端请求地址。
91
+ - 修改应用页面列表或构建配置后,建议重启 watch;重启会清除内存中的页面编译状态。
92
+
93
+ ## 🤝 常见问题
94
+
95
+ 占位页面一直不消失时,检查 `/compile` 请求、域名校验设置、实际监听端口和终端编译错误。代码更新不生效时,确认 `--watch`、`mini.debugReact: true` 及开发者工具热重载已开启,再通过 `debug: true` 查看日志。
96
+
97
+ 完整接入步骤见[根 README](../../README.md)。
98
+
99
+ ## 📄 许可证
100
+
101
+ MIT
@@ -51,22 +51,29 @@ const CORE_RUNTIME_REQUEST = require.resolve('@taro-hmr-compile/core/runtime');
51
51
  const injectAppHmrRuntime = (source, debugNamespaces = '') => {
52
52
  const ast = parser.parse(source, { sourceType: 'module' });
53
53
  const buildHmrCode = template_1.default.statements(`
54
- import { hmrState, mergePatches, enableLog as enableHmrCoreLog } from ${JSON.stringify(CORE_RUNTIME_REQUEST)}
54
+ import { updatePatchContext, mergePatches, enableLog as enableHmrCoreLog } from ${JSON.stringify(CORE_RUNTIME_REQUEST)}
55
55
  import { log, enableLog as enableHmrWebpackLog } from ${JSON.stringify(LOG_REQUEST)}
56
56
  enableHmrCoreLog(${JSON.stringify(debugNamespaces)})
57
57
  enableHmrWebpackLog(${JSON.stringify(debugNamespaces)})
58
58
  globalThis.log = log.extend('runtime')
59
+ updatePatchContext.initialize(${webpack_1.default.RuntimeGlobals.getFullHash}())
59
60
  globalThis.miniHmrApplyPatch = async (patches)=>{
61
+ let transaction
60
62
  try {
61
63
  const { miniHmr } = __webpack_require__
62
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)
63
68
 
64
- if (miniHmr.shouldApplyBootstrapPatch(bootstrapPatch)) miniHmr.applyBootstrapPatch(bootstrapPatch)
69
+ if (shouldApplyBootstrapPatch) miniHmr.applyBootstrapPatch(bootstrapPatch)
70
+ if (!updatePatch) return
65
71
 
66
- const updatePatch = mergePatches(${webpack_1.default.RuntimeGlobals.getFullHash}(), patches)
67
- hmrState.setLastFullHash(updatePatch?.toHash ?? ${webpack_1.default.RuntimeGlobals.getFullHash}())
72
+ transaction = updatePatchContext.beginTransaction({fromHash: currentHash,toHash: updatePatch.toHash})
68
73
  await miniHmr.applyUpdatePatch(updatePatch)
74
+ updatePatchContext.completeTransaction(transaction.id)
69
75
  } catch (error) {
76
+ if (transaction) updatePatchContext.abortTransaction(transaction.id)
70
77
  console.error('[taro-hmr-compile] patch apply failed', error)
71
78
  return Promise.resolve()
72
79
  }
@@ -102,6 +109,29 @@ const transformPageConfig = (source, sourceFileName) => {
102
109
  });
103
110
  });
104
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
+ };
105
135
  (0, traverse_1.default)(ast, {
106
136
  Program(programPath) {
107
137
  // 判断是否存在 createPageConfig 引用
@@ -119,6 +149,7 @@ const transformPageConfig = (source, sourceFileName) => {
119
149
  return;
120
150
  // 判断是否存在 withHmrPageConfig 引用
121
151
  const hasWithHmrPageConfigBinding = programPath.scope.hasBinding(WITH_HMR_PAGE_CONFIG);
152
+ const shouldInjectHotAccept = !hasHotAccept(programPath);
122
153
  // 生成 withHmrPageConfig 的别名
123
154
  const wrapperIdentifier = hasWithHmrPageConfigBinding ? programPath.scope.generateUidIdentifier(WITH_HMR_PAGE_CONFIG) : t.identifier(WITH_HMR_PAGE_CONFIG);
124
155
  // 生成 runtime import
@@ -127,23 +158,29 @@ const transformPageConfig = (source, sourceFileName) => {
127
158
  return template_1.default.statement(`import { ${WITH_HMR_PAGE_CONFIG} } from ${JSON.stringify(CORE_RUNTIME_REQUEST)};`)();
128
159
  return template_1.default.statement(`import { ${WITH_HMR_PAGE_CONFIG} as %%WRAPPER%% } from ${JSON.stringify(CORE_RUNTIME_REQUEST)};`)({ WRAPPER: wrapperIdentifier });
129
160
  })();
161
+ let transformedPageConfig = false;
130
162
  programPath.traverse({
131
163
  CallExpression(CallExpressionPath) {
132
164
  const { node: CallExpressionNode } = CallExpressionPath;
133
165
  if (!t.isIdentifier(CallExpressionNode.callee, { name: CREATE_PAGE_CONFIG }))
134
166
  return;
135
167
  const [_, pageName] = CallExpressionNode.arguments;
136
- const wrappedPageConfig = template_1.default.expression(`%%WRAPPER%%(%%PAGE_CONFIG%%, %%PAGE_NAME%%)`)({
168
+ const wrappedPageConfig = template_1.default.expression(`%%WRAPPER%%(%%PAGE_CONFIG%%, %%PAGE_NAME%%, typeof module !== 'undefined' ? module.hot : undefined)`)({
137
169
  WRAPPER: wrapperIdentifier,
138
170
  PAGE_CONFIG: CallExpressionNode,
139
171
  PAGE_NAME: pageName,
140
172
  });
141
- if (!hasImportWithHmrPageConfig(programPath))
142
- programPath.unshiftContainer('body', runtimeImport);
143
173
  CallExpressionPath.replaceWith(wrappedPageConfig);
144
174
  CallExpressionPath.skip();
175
+ transformedPageConfig = true;
145
176
  }
146
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
+ }
147
184
  },
148
185
  });
149
186
  return (0, generator_1.default)(ast, { sourceMaps: true, sourceFileName }, source).code;
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-compiler-loader.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hmr-compiler-loader.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-loader.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,21 @@
1
1
  import type { IPaths } from '@tarojs/service';
2
2
  import type { AppConfig } from '@tarojs/taro';
3
3
  import { SyncHook } from 'tapable';
4
- import type { Compilation, Compiler } from 'webpack';
4
+ import type { Chunk, Compilation, Compiler } from 'webpack';
5
5
  import { ConcatSource } from 'webpack-sources';
6
6
  import type { Source } from 'webpack-sources';
7
- type StyleFilename = NonNullable<Compiler['options']['output']['cssFilename']>;
8
7
  export interface HmrCompilerPluginOptions {
9
8
  paths: IPaths;
10
9
  appConfig: AppConfig;
11
- styleFilename?: StyleFilename;
12
10
  debugNamespaces?: string;
13
11
  }
14
12
  type CompileRequested = SyncHook<[page: string]>;
15
- type ChunkModulesRendered = SyncHook<[source: string, isPageChunk: boolean]>;
13
+ interface ChunkModulesRenderedOptions {
14
+ source: string;
15
+ isBootstrapChunk: boolean;
16
+ chunk: Chunk;
17
+ }
18
+ type ChunkModulesRendered = SyncHook<[options: ChunkModulesRenderedOptions]>;
16
19
  export interface HmrCompilerHooks {
17
20
  compileRequested: CompileRequested;
18
21
  }
@@ -24,7 +27,6 @@ export declare class HmrCompilerPlugin {
24
27
  private static readonly compilerHooksMap;
25
28
  private static readonly compilationHooksMap;
26
29
  private compiler?;
27
- private hasCompletedInitialBuild;
28
30
  private readonly pendingFiles;
29
31
  private readonly rebuildingFiles;
30
32
  private readonly options;
@@ -34,8 +36,6 @@ export declare class HmrCompilerPlugin {
34
36
  apply(compiler: Compiler): void;
35
37
  private requestCompile;
36
38
  private isPageChunk;
37
- /** PageShell 不包含真实页面的样式依赖,为缺失的页面样式补充空资产。 */
38
- private emitMissingPageStyleAssets;
39
39
  private reset;
40
40
  }
41
41
  export {};
@@ -21,7 +21,6 @@ const applyPatchBeforeStartup = (source, request) => {
21
21
  exports.applyPatchBeforeStartup = applyPatchBeforeStartup;
22
22
  class HmrCompilerPlugin {
23
23
  constructor(options) {
24
- this.hasCompletedInitialBuild = false;
25
24
  // 页面编译请求可能在任意时刻到达。先排队到下一轮 watchRun,避免与正在执行的编译相互覆盖。
26
25
  this.pendingFiles = new Set();
27
26
  // 当前编译批次的文件快照。与 pendingFiles 分离,确保编译期间新到达的请求留给下一批处理。
@@ -37,7 +36,7 @@ class HmrCompilerPlugin {
37
36
  }
38
37
  static getCompilationHooks(compilation) {
39
38
  if (!HmrCompilerPlugin.compilationHooksMap.get(compilation)) {
40
- const chunkModulesRendered = new tapable_1.SyncHook(['source', 'isBootstrapChunk']);
39
+ const chunkModulesRendered = new tapable_1.SyncHook(['options']);
41
40
  HmrCompilerPlugin.compilationHooksMap.set(compilation, { chunkModulesRendered });
42
41
  }
43
42
  return HmrCompilerPlugin.compilationHooksMap.get(compilation);
@@ -82,7 +81,7 @@ class HmrCompilerPlugin {
82
81
  // 因而 hash、HMR diff 和 hot-update 仍以完整模块图为准。
83
82
  javascriptHooks.renderChunk.tap({ name: PLUGIN_NAME, stage: -10000 }, (source, { chunk }) => {
84
83
  const isBootstrapChunk = isPageChunk(chunk);
85
- hmrHooks.chunkModulesRendered.call(source.source().toString(), isBootstrapChunk);
84
+ hmrHooks.chunkModulesRendered.call({ source: source.source().toString(), isBootstrapChunk, chunk });
86
85
  return isBootstrapChunk ? new webpack_sources_1.RawSource('{}') : source;
87
86
  });
88
87
  javascriptHooks.renderStartup.tap(PLUGIN_NAME, (source, _module, { chunk }) => {
@@ -110,16 +109,6 @@ class HmrCompilerPlugin {
110
109
  return callback(null, true);
111
110
  callback();
112
111
  });
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
112
  });
124
113
  // 当前批次完成后释放快照;编译期间新进入 pendingFiles 的请求不会被清理。
125
114
  compiler.hooks.done.tap(PLUGIN_NAME, () => this.rebuildingFiles.clear());
@@ -145,24 +134,8 @@ class HmrCompilerPlugin {
145
134
  return true;
146
135
  return Array.from(pages).some(page => { var _a; return ((_a = compilation.entrypoints.get(page)) === null || _a === void 0 ? void 0 : _a.getEntrypointChunk()) === chunk; });
147
136
  }
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
137
  reset() {
164
138
  (0, compile_state_1.clearCompiledPages)(this.options.paths.appPath);
165
- this.hasCompletedInitialBuild = false;
166
139
  this.rebuildingFiles.clear();
167
140
  this.pendingFiles.clear();
168
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-compiler-plugin.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hmr-compiler-plugin.js","sourceRoot":"","sources":["../../src/compile/hmr-compiler-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Compiler } from 'webpack';
2
+ export declare const PLUGIN_NAME = "HmrOutputPlugin";
3
+ export interface AtomicOutputPluginOptions {
4
+ /** 这些资产仍由 Webpack 生成,但等其他资产输出完成后才按配置顺序发布。 */
5
+ deferredAssets?: readonly string[];
6
+ }
7
+ export declare class HmrOutputPlugin {
8
+ private readonly deferredAssets;
9
+ private readonly deferredOutputs;
10
+ constructor(options?: AtomicOutputPluginOptions);
11
+ apply(compiler: Compiler): void;
12
+ /**
13
+ * 代理原始 OutputFileSystem。
14
+ * 仅重写 writeFile,其余方法调用原始文件系统实现。
15
+ */
16
+ private createOutputFileSystem;
17
+ /**
18
+ * 创建自定义 writeFile 实现。
19
+ */
20
+ private createWriteFile;
21
+ private collectDeferredOutputs;
22
+ private getAssetName;
23
+ private flushDeferredOutputs;
24
+ /**
25
+ * 通过同目录临时文件和 rename 原子替换目标文件。
26
+ */
27
+ private writeFileAtomically;
28
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HmrOutputPlugin = exports.PLUGIN_NAME = void 0;
16
+ const node_crypto_1 = require("node:crypto");
17
+ const promises_1 = require("node:fs/promises");
18
+ const node_path_1 = __importDefault(require("node:path"));
19
+ exports.PLUGIN_NAME = 'HmrOutputPlugin';
20
+ class HmrOutputPlugin {
21
+ constructor(options = {}) {
22
+ var _a;
23
+ this.deferredOutputs = new WeakMap();
24
+ this.deferredAssets = (_a = options.deferredAssets) !== null && _a !== void 0 ? _a : [];
25
+ }
26
+ apply(compiler) {
27
+ const outputFileSystem = compiler.outputFileSystem;
28
+ if (!outputFileSystem)
29
+ throw new Error(`[${exports.PLUGIN_NAME}] Webpack outputFileSystem 尚未初始化`);
30
+ compiler.outputFileSystem = this.createOutputFileSystem(compiler, outputFileSystem);
31
+ // 尽可能在其他 emit tap 之后读取资产,随后 Webpack 才开始物理输出。
32
+ compiler.hooks.emit.tap({ name: exports.PLUGIN_NAME, stage: Number.MAX_SAFE_INTEGER }, compilation => {
33
+ if (compilation.errors.length > 0)
34
+ return;
35
+ this.collectDeferredOutputs(compiler, compilation);
36
+ });
37
+ // 等待普通资产写入完成后,再按配置顺序发布延迟资产。
38
+ compiler.hooks.afterEmit.tapPromise(exports.PLUGIN_NAME, (compilation) => __awaiter(this, void 0, void 0, function* () {
39
+ try {
40
+ if (compilation.errors.length > 0)
41
+ return;
42
+ yield this.flushDeferredOutputs(compilation);
43
+ }
44
+ finally {
45
+ this.deferredOutputs.delete(compilation);
46
+ }
47
+ }));
48
+ }
49
+ /**
50
+ * 代理原始 OutputFileSystem。
51
+ * 仅重写 writeFile,其余方法调用原始文件系统实现。
52
+ */
53
+ createOutputFileSystem(compiler, original) {
54
+ return new Proxy(original, {
55
+ get: (target, property) => {
56
+ if (property === 'writeFile')
57
+ return this.createWriteFile(compiler, original);
58
+ const value = Reflect.get(target, property, target);
59
+ return typeof value === 'function' ? value.bind(target) : value;
60
+ }
61
+ });
62
+ }
63
+ /**
64
+ * 创建自定义 writeFile 实现。
65
+ */
66
+ createWriteFile(compiler, original) {
67
+ const originalWriteFile = original.writeFile.bind(original);
68
+ return (file, data, optionsOrCallback, optionalCallback) => {
69
+ const callback = (() => {
70
+ if (typeof optionsOrCallback === 'function')
71
+ return optionsOrCallback;
72
+ return optionalCallback;
73
+ })();
74
+ const triggerOriginalWriteFile = () => {
75
+ if (typeof optionsOrCallback === 'function')
76
+ return originalWriteFile(file, data, optionsOrCallback);
77
+ if (optionalCallback)
78
+ originalWriteFile(file, data, optionsOrCallback, optionalCallback);
79
+ };
80
+ if (typeof file !== 'string' || !callback)
81
+ return triggerOriginalWriteFile();
82
+ const assetName = this.getAssetName(compiler, file);
83
+ if (assetName && this.deferredAssets.includes(assetName))
84
+ return callback(null);
85
+ this.writeFileAtomically(file, data).then(() => callback(null)).catch(error => callback(error));
86
+ };
87
+ }
88
+ collectDeferredOutputs(compiler, compilation) {
89
+ if (this.deferredAssets.length === 0)
90
+ return;
91
+ const { path: outputPath } = compiler.options.output;
92
+ if (!outputPath)
93
+ throw new Error(`[${exports.PLUGIN_NAME}] 无法收集延迟资产:output.path 未配置`);
94
+ const outputs = new Map();
95
+ this.deferredAssets.forEach(assetName => {
96
+ const asset = compilation.getAsset(assetName);
97
+ if (!asset)
98
+ return;
99
+ const data = asset.source.source();
100
+ outputs.set(assetName, { data, file: node_path_1.default.join(outputPath, assetName) });
101
+ });
102
+ this.deferredOutputs.set(compilation, outputs);
103
+ }
104
+ getAssetName(compiler, file) {
105
+ const { path: outputPath } = compiler.options.output;
106
+ if (!outputPath)
107
+ return;
108
+ const assetName = node_path_1.default.relative(outputPath, file).replaceAll('\\', '/');
109
+ if (assetName.startsWith('../') || node_path_1.default.isAbsolute(assetName))
110
+ return;
111
+ return assetName;
112
+ }
113
+ flushDeferredOutputs(compilation) {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ const outputs = this.deferredOutputs.get(compilation);
116
+ if (!outputs)
117
+ return;
118
+ return Promise.all(this.deferredAssets.map(assetName => {
119
+ const output = outputs.get(assetName);
120
+ if (!output)
121
+ return;
122
+ return this.writeFileAtomically(output.file, output.data);
123
+ }));
124
+ });
125
+ }
126
+ /**
127
+ * 通过同目录临时文件和 rename 原子替换目标文件。
128
+ */
129
+ writeFileAtomically(targetPath, data) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ const directory = node_path_1.default.dirname(targetPath);
132
+ const temporaryPath = node_path_1.default.join(directory, `.${node_path_1.default.basename(targetPath)}.${(0, node_crypto_1.randomUUID)()}.tmp`);
133
+ yield (0, promises_1.mkdir)(directory, { recursive: true });
134
+ try {
135
+ yield (0, promises_1.writeFile)(temporaryPath, data);
136
+ yield (0, promises_1.rename)(temporaryPath, targetPath);
137
+ }
138
+ finally {
139
+ yield (0, promises_1.rm)(temporaryPath, { force: true });
140
+ }
141
+ });
142
+ }
143
+ }
144
+ exports.HmrOutputPlugin = HmrOutputPlugin;
145
+ //# sourceMappingURL=hmr-output-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-output-plugin.js","sourceRoot":"","sources":["../../src/compile/hmr-output-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Compilation, Compiler } from 'webpack';
2
+ export interface HmrStylePluginOptions {
3
+ /** Webpack/Taro 生成的全局样式资产。 */
4
+ sourceAsset: string;
5
+ /** 固定入口资产;后续编译持续引用 patchAsset。 */
6
+ entryAsset: string;
7
+ /** 每轮热编译输出的独立样式资产。 */
8
+ patchAsset: string;
9
+ /** 是否将入口固定为对 patchAsset 的导入。 */
10
+ preserveEntry?: boolean;
11
+ /** 自定义源样式到 patch 样式的内容转换。 */
12
+ transform?: (source: string, compilation: Compilation) => string;
13
+ }
14
+ /**
15
+ * 将构建器生成的全局样式复制到独立 HMR 资产,并可固定入口文件。
16
+ * 应在构建器完成最终资产变换后运行。
17
+ */
18
+ export declare class HmrStylePlugin {
19
+ private readonly options;
20
+ private initialBuildDone;
21
+ constructor(options: HmrStylePluginOptions);
22
+ apply(compiler: Compiler): void;
23
+ private processAssets;
24
+ private updateAsset;
25
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HmrStylePlugin = void 0;
4
+ const webpack_sources_1 = require("webpack-sources");
5
+ const PLUGIN_NAME = 'HmrStylePlugin';
6
+ /**
7
+ * 将构建器生成的全局样式复制到独立 HMR 资产,并可固定入口文件。
8
+ * 应在构建器完成最终资产变换后运行。
9
+ */
10
+ class HmrStylePlugin {
11
+ constructor(options) {
12
+ this.initialBuildDone = false;
13
+ this.options = options;
14
+ }
15
+ apply(compiler) {
16
+ compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
17
+ const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT;
18
+ compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, () => this.processAssets(compilation));
19
+ });
20
+ compiler.hooks.afterEmit.tap(PLUGIN_NAME, compilation => {
21
+ if (compilation.errors.length === 0 && compilation.hash)
22
+ this.initialBuildDone = true;
23
+ });
24
+ compiler.hooks.watchClose.tap(PLUGIN_NAME, () => {
25
+ this.initialBuildDone = false;
26
+ });
27
+ }
28
+ processAssets(compilation) {
29
+ var _a;
30
+ if (!compilation.hash || compilation.errors.length > 0)
31
+ return;
32
+ const { sourceAsset, entryAsset, patchAsset, preserveEntry = true, transform } = this.options;
33
+ const source = (_a = compilation.getAsset(sourceAsset)) === null || _a === void 0 ? void 0 : _a.source.source().toString();
34
+ if (source !== undefined) {
35
+ const patchSource = transform ? transform(source, compilation) : source;
36
+ this.updateAsset(compilation, patchAsset, new webpack_sources_1.RawSource(patchSource), {
37
+ hotModuleReplacement: this.initialBuildDone
38
+ });
39
+ }
40
+ if (preserveEntry) {
41
+ const entry = new webpack_sources_1.RawSource(`@import ${JSON.stringify(`./${patchAsset}`)};\n`);
42
+ this.updateAsset(compilation, entryAsset, entry);
43
+ }
44
+ }
45
+ updateAsset(compilation, name, source, info = {}) {
46
+ if (compilation.getAsset(name))
47
+ compilation.updateAsset(name, source, info);
48
+ else
49
+ compilation.emitAsset(name, source, info);
50
+ }
51
+ }
52
+ exports.HmrStylePlugin = HmrStylePlugin;
53
+ //# sourceMappingURL=hmr-style-plugin.js.map