webpack 5.99.8 → 5.100.0

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 (314) hide show
  1. package/README.md +0 -3
  2. package/bin/webpack.js +8 -2
  3. package/hot/log.js +15 -15
  4. package/hot/poll.js +1 -0
  5. package/lib/APIPlugin.js +3 -3
  6. package/lib/AbstractMethodError.js +1 -0
  7. package/lib/AutomaticPrefetchPlugin.js +1 -0
  8. package/lib/BannerPlugin.js +1 -1
  9. package/lib/CacheFacade.js +2 -1
  10. package/lib/CaseSensitiveModulesWarning.js +4 -4
  11. package/lib/Chunk.js +6 -6
  12. package/lib/ChunkGraph.js +37 -32
  13. package/lib/ChunkGroup.js +17 -10
  14. package/lib/ChunkTemplate.js +1 -1
  15. package/lib/CleanPlugin.js +94 -17
  16. package/lib/CodeGenerationResults.js +1 -1
  17. package/lib/CompatibilityPlugin.js +5 -2
  18. package/lib/Compilation.js +77 -71
  19. package/lib/Compiler.js +46 -16
  20. package/lib/ConcatenationScope.js +15 -6
  21. package/lib/ConstPlugin.js +65 -45
  22. package/lib/ContextModule.js +16 -12
  23. package/lib/ContextModuleFactory.js +4 -3
  24. package/lib/ContextReplacementPlugin.js +4 -2
  25. package/lib/CssModule.js +2 -3
  26. package/lib/DefinePlugin.js +111 -3
  27. package/lib/DelegatedModuleFactoryPlugin.js +18 -18
  28. package/lib/Dependency.js +16 -12
  29. package/lib/DependencyTemplate.js +1 -0
  30. package/lib/DllEntryPlugin.js +3 -1
  31. package/lib/DllPlugin.js +4 -3
  32. package/lib/DllReferencePlugin.js +2 -2
  33. package/lib/DynamicEntryPlugin.js +1 -1
  34. package/lib/EntryOptionPlugin.js +5 -0
  35. package/lib/ErrorHelpers.js +4 -4
  36. package/lib/EvalDevToolModulePlugin.js +3 -3
  37. package/lib/EvalSourceMapDevToolPlugin.js +7 -7
  38. package/lib/ExportsInfo.js +48 -39
  39. package/lib/ExternalModule.js +15 -11
  40. package/lib/ExternalModuleFactoryPlugin.js +5 -2
  41. package/lib/FileSystemInfo.js +51 -38
  42. package/lib/FlagDependencyExportsPlugin.js +14 -7
  43. package/lib/FlagDependencyUsagePlugin.js +1 -1
  44. package/lib/Generator.js +14 -1
  45. package/lib/HookWebpackError.js +1 -0
  46. package/lib/HotModuleReplacementPlugin.js +77 -50
  47. package/lib/IgnorePlugin.js +1 -1
  48. package/lib/InvalidDependenciesModuleWarning.js +1 -1
  49. package/lib/JavascriptMetaInfoPlugin.js +0 -1
  50. package/lib/LibManifestPlugin.js +4 -2
  51. package/lib/LoaderOptionsPlugin.js +6 -4
  52. package/lib/MainTemplate.js +2 -2
  53. package/lib/Module.js +21 -6
  54. package/lib/ModuleFactory.js +1 -0
  55. package/lib/ModuleGraph.js +24 -2
  56. package/lib/ModuleGraphConnection.js +5 -5
  57. package/lib/ModuleInfoHeaderPlugin.js +2 -1
  58. package/lib/ModuleParseError.js +1 -0
  59. package/lib/ModuleSourceTypesConstants.js +12 -12
  60. package/lib/ModuleTemplate.js +1 -1
  61. package/lib/ModuleTypeConstants.js +21 -21
  62. package/lib/MultiCompiler.js +6 -6
  63. package/lib/NormalModule.js +61 -56
  64. package/lib/NormalModuleFactory.js +52 -37
  65. package/lib/NormalModuleReplacementPlugin.js +1 -1
  66. package/lib/NullFactory.js +1 -0
  67. package/lib/OptimizationStages.js +1 -1
  68. package/lib/Parser.js +1 -0
  69. package/lib/ProgressPlugin.js +12 -5
  70. package/lib/ProvidePlugin.js +5 -1
  71. package/lib/RecordIdsPlugin.js +3 -3
  72. package/lib/RuntimeGlobals.js +175 -155
  73. package/lib/RuntimeModule.js +1 -0
  74. package/lib/RuntimePlugin.js +34 -8
  75. package/lib/RuntimeTemplate.js +111 -11
  76. package/lib/SourceMapDevToolModuleOptionsPlugin.js +15 -25
  77. package/lib/SourceMapDevToolPlugin.js +19 -17
  78. package/lib/Template.js +2 -2
  79. package/lib/TemplatedPathPlugin.js +1 -1
  80. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  81. package/lib/WatchIgnorePlugin.js +4 -3
  82. package/lib/WebpackIsIncludedPlugin.js +2 -1
  83. package/lib/WebpackOptionsApply.js +115 -27
  84. package/lib/asset/AssetGenerator.js +26 -21
  85. package/lib/asset/AssetModulesPlugin.js +19 -17
  86. package/lib/asset/AssetSourceGenerator.js +11 -9
  87. package/lib/asset/RawDataUrlModule.js +4 -2
  88. package/lib/async-modules/AwaitDependenciesInitFragment.js +1 -1
  89. package/lib/buildChunkGraph.js +6 -3
  90. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  91. package/lib/cache/IdleFileCachePlugin.js +7 -4
  92. package/lib/cache/MemoryCachePlugin.js +1 -0
  93. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  94. package/lib/cache/PackFileCacheStrategy.js +26 -20
  95. package/lib/cache/ResolverCachePlugin.js +16 -8
  96. package/lib/cli.js +15 -10
  97. package/lib/config/browserslistTargetHandler.js +3 -3
  98. package/lib/config/defaults.js +25 -17
  99. package/lib/config/normalization.js +2 -1
  100. package/lib/config/target.js +6 -5
  101. package/lib/container/ContainerPlugin.js +1 -1
  102. package/lib/container/ContainerReferencePlugin.js +1 -1
  103. package/lib/container/FallbackModule.js +2 -1
  104. package/lib/container/HoistContainerReferencesPlugin.js +1 -1
  105. package/lib/container/ModuleFederationPlugin.js +2 -2
  106. package/lib/container/RemoteModule.js +1 -1
  107. package/lib/css/CssGenerator.js +9 -6
  108. package/lib/css/CssModulesPlugin.js +44 -31
  109. package/lib/css/CssParser.js +6 -4
  110. package/lib/css/walkCssTokens.js +33 -37
  111. package/lib/debug/ProfilingPlugin.js +6 -6
  112. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +8 -8
  113. package/lib/dependencies/AMDPlugin.js +12 -8
  114. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -26
  115. package/lib/dependencies/CachedConstDependency.js +1 -5
  116. package/lib/dependencies/CommonJsExportRequireDependency.js +6 -4
  117. package/lib/dependencies/CommonJsExportsParserPlugin.js +22 -25
  118. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -9
  119. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -114
  120. package/lib/dependencies/CommonJsPlugin.js +15 -16
  121. package/lib/dependencies/ContextDependencyHelpers.js +2 -1
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  123. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  124. package/lib/dependencies/CssIcssExportDependency.js +1 -1
  125. package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
  126. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  127. package/lib/dependencies/CssUrlDependency.js +1 -1
  128. package/lib/dependencies/DynamicExports.js +9 -9
  129. package/lib/dependencies/ExportsInfoDependency.js +1 -1
  130. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +122 -101
  131. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  132. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +95 -19
  133. package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
  134. package/lib/dependencies/HarmonyImportDependency.js +11 -5
  135. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +238 -162
  136. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -1
  137. package/lib/dependencies/HarmonyImportSpecifierDependency.js +20 -9
  138. package/lib/dependencies/HarmonyModulesPlugin.js +23 -12
  139. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -0
  140. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  141. package/lib/dependencies/ImportMetaPlugin.js +2 -2
  142. package/lib/dependencies/ImportParserPlugin.js +40 -9
  143. package/lib/dependencies/ImportPlugin.js +3 -1
  144. package/lib/dependencies/LoaderPlugin.js +1 -0
  145. package/lib/dependencies/ModuleDependency.js +1 -1
  146. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  147. package/lib/dependencies/RequireContextPlugin.js +3 -1
  148. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -0
  149. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  150. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  151. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  152. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  153. package/lib/dependencies/SystemPlugin.js +1 -1
  154. package/lib/dependencies/URLContextDependency.js +65 -0
  155. package/lib/dependencies/URLDependency.js +1 -1
  156. package/lib/dependencies/URLPlugin.js +17 -157
  157. package/lib/dependencies/WorkerPlugin.js +23 -10
  158. package/lib/dependencies/processExportInfo.js +2 -1
  159. package/lib/esm/ModuleChunkFormatPlugin.js +269 -185
  160. package/lib/esm/ModuleChunkLoadingPlugin.js +39 -1
  161. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +73 -6
  162. package/lib/hmr/HotModuleReplacement.runtime.js +0 -1
  163. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  164. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  165. package/lib/hmr/LazyCompilationPlugin.js +4 -2
  166. package/lib/hmr/lazyCompilationBackend.js +4 -2
  167. package/lib/ids/ChunkModuleIdRangePlugin.js +6 -3
  168. package/lib/ids/DeterministicChunkIdsPlugin.js +30 -35
  169. package/lib/ids/DeterministicModuleIdsPlugin.js +4 -3
  170. package/lib/ids/HashedModuleIdsPlugin.js +5 -4
  171. package/lib/ids/IdHelpers.js +21 -17
  172. package/lib/ids/NamedChunkIdsPlugin.js +5 -5
  173. package/lib/ids/NamedModuleIdsPlugin.js +4 -4
  174. package/lib/ids/NaturalChunkIdsPlugin.js +2 -1
  175. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  176. package/lib/ids/OccurrenceChunkIdsPlugin.js +3 -2
  177. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  178. package/lib/ids/SyncModuleIdsPlugin.js +1 -1
  179. package/lib/index.js +13 -3
  180. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +113 -119
  181. package/lib/javascript/BasicEvaluatedExpression.js +2 -1
  182. package/lib/javascript/ChunkHelpers.js +1 -0
  183. package/lib/javascript/CommonJsChunkFormatPlugin.js +121 -136
  184. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -3
  185. package/lib/javascript/JavascriptGenerator.js +14 -2
  186. package/lib/javascript/JavascriptModulesPlugin.js +68 -27
  187. package/lib/javascript/JavascriptParser.js +136 -81
  188. package/lib/javascript/JavascriptParserHelpers.js +41 -41
  189. package/lib/javascript/StartupHelpers.js +17 -17
  190. package/lib/json/JsonGenerator.js +4 -2
  191. package/lib/json/JsonModulesPlugin.js +2 -2
  192. package/lib/json/JsonParser.js +1 -1
  193. package/lib/library/AbstractLibraryPlugin.js +6 -2
  194. package/lib/library/AssignLibraryPlugin.js +21 -6
  195. package/lib/library/EnableLibraryPlugin.js +23 -3
  196. package/lib/library/ModuleLibraryPlugin.js +4 -1
  197. package/lib/library/UmdLibraryPlugin.js +15 -6
  198. package/lib/logging/createConsoleLogger.js +3 -3
  199. package/lib/logging/runtime.js +9 -9
  200. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +4 -22
  201. package/lib/node/RequireChunkLoadingRuntimeModule.js +4 -22
  202. package/lib/node/nodeConsole.js +4 -2
  203. package/lib/optimize/AggressiveMergingPlugin.js +45 -46
  204. package/lib/optimize/AggressiveSplittingPlugin.js +13 -12
  205. package/lib/optimize/ConcatenatedModule.js +227 -57
  206. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  207. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -1
  208. package/lib/optimize/InnerGraph.js +115 -112
  209. package/lib/optimize/InnerGraphPlugin.js +2 -2
  210. package/lib/optimize/LimitChunkCountPlugin.js +4 -2
  211. package/lib/optimize/MangleExportsPlugin.js +4 -3
  212. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  213. package/lib/optimize/MinChunkSizePlugin.js +6 -3
  214. package/lib/optimize/ModuleConcatenationPlugin.js +31 -22
  215. package/lib/optimize/RealContentHashPlugin.js +26 -20
  216. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  217. package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
  218. package/lib/optimize/SideEffectsFlagPlugin.js +6 -3
  219. package/lib/optimize/SplitChunksPlugin.js +16 -13
  220. package/lib/rules/BasicEffectRulePlugin.js +4 -2
  221. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  222. package/lib/rules/ObjectMatcherRulePlugin.js +3 -1
  223. package/lib/rules/RuleSetCompiler.js +7 -4
  224. package/lib/rules/UseEffectRulePlugin.js +3 -1
  225. package/lib/runtime/AsyncModuleRuntimeModule.js +64 -9
  226. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +214 -0
  228. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  229. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +8 -7
  230. package/lib/schemes/DataUriPlugin.js +3 -1
  231. package/lib/schemes/FileUriPlugin.js +1 -1
  232. package/lib/schemes/HttpUriPlugin.js +27 -19
  233. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  234. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  235. package/lib/serialization/BinaryMiddleware.js +5 -4
  236. package/lib/serialization/FileMiddleware.js +7 -4
  237. package/lib/serialization/ObjectMiddleware.js +14 -8
  238. package/lib/serialization/Serializer.js +5 -3
  239. package/lib/serialization/SerializerMiddleware.js +2 -0
  240. package/lib/sharing/ConsumeSharedModule.js +1 -1
  241. package/lib/sharing/ConsumeSharedPlugin.js +3 -3
  242. package/lib/sharing/ConsumeSharedRuntimeModule.js +2 -2
  243. package/lib/sharing/ProvideSharedModule.js +1 -1
  244. package/lib/sharing/ProvideSharedPlugin.js +6 -3
  245. package/lib/sharing/SharePlugin.js +2 -1
  246. package/lib/sharing/ShareRuntimeModule.js +3 -5
  247. package/lib/sharing/utils.js +34 -34
  248. package/lib/stats/DefaultStatsFactoryPlugin.js +49 -46
  249. package/lib/stats/DefaultStatsPresetPlugin.js +4 -2
  250. package/lib/stats/DefaultStatsPrinterPlugin.js +28 -22
  251. package/lib/stats/StatsFactory.js +4 -2
  252. package/lib/stats/StatsPrinter.js +3 -2
  253. package/lib/url/URLParserPlugin.js +266 -0
  254. package/lib/util/ArrayQueue.js +1 -1
  255. package/lib/util/AsyncQueue.js +1 -1
  256. package/lib/util/Hash.js +2 -0
  257. package/lib/util/IterableHelpers.js +1 -1
  258. package/lib/util/LazyBucketSortedSet.js +2 -1
  259. package/lib/util/LazySet.js +11 -6
  260. package/lib/util/ParallelismFactorCalculator.js +1 -1
  261. package/lib/util/SetHelpers.js +3 -3
  262. package/lib/util/SortableSet.js +2 -2
  263. package/lib/util/StackedCacheMap.js +3 -1
  264. package/lib/util/StackedMap.js +2 -2
  265. package/lib/util/StringXor.js +1 -0
  266. package/lib/util/TupleSet.js +1 -0
  267. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  268. package/lib/util/cleverMerge.js +12 -8
  269. package/lib/util/comparators.js +154 -127
  270. package/lib/util/compileBooleanMatcher.js +8 -3
  271. package/lib/util/concatenate.js +8 -7
  272. package/lib/util/conventions.js +72 -73
  273. package/lib/util/create-schema-validation.js +2 -1
  274. package/lib/util/createHash.js +10 -4
  275. package/lib/util/deprecation.js +69 -66
  276. package/lib/util/deterministicGrouping.js +4 -2
  277. package/lib/util/extractUrlAndGlobal.js +1 -1
  278. package/lib/util/findGraphRoots.js +2 -2
  279. package/lib/util/fs.js +30 -23
  280. package/lib/util/hash/md4.js +2 -2
  281. package/lib/util/hash/wasm-hash.js +4 -2
  282. package/lib/util/identifier.js +13 -12
  283. package/lib/util/internalSerializables.js +2 -0
  284. package/lib/util/magicComment.js +5 -5
  285. package/lib/util/processAsyncTree.js +1 -1
  286. package/lib/util/propertyAccess.js +1 -1
  287. package/lib/util/propertyName.js +1 -1
  288. package/lib/util/registerExternalSerializer.js +1 -2
  289. package/lib/util/removeBOM.js +1 -1
  290. package/lib/util/runtime.js +29 -21
  291. package/lib/util/semver.js +1 -1
  292. package/lib/util/serialization.js +3 -0
  293. package/lib/util/source.js +3 -2
  294. package/lib/validateSchema.js +1 -0
  295. package/lib/wasm/EnableWasmLoadingPlugin.js +6 -3
  296. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -1
  297. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +46 -49
  298. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +2 -2
  299. package/lib/wasm-sync/WebAssemblyGenerator.js +2 -3
  300. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +3 -2
  301. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +3 -0
  302. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  303. package/lib/web/JsonpChunkLoadingRuntimeModule.js +4 -22
  304. package/lib/webpack.js +4 -5
  305. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +1 -0
  306. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -24
  307. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  308. package/package.json +121 -114
  309. package/schemas/WebpackOptions.check.js +1 -1
  310. package/schemas/WebpackOptions.json +17 -0
  311. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  312. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  313. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  314. package/types.d.ts +1261 -366
@@ -6,21 +6,111 @@
6
6
  "use strict";
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
- const { RuntimeGlobals } = require("..");
10
- const HotUpdateChunk = require("../HotUpdateChunk");
9
+ const { HotUpdateChunk, RuntimeGlobals } = require("..");
11
10
  const Template = require("../Template");
12
11
  const { getAllChunks } = require("../javascript/ChunkHelpers");
13
12
  const {
14
13
  chunkHasJs,
15
- getCompilationHooks,
16
- getChunkFilenameTemplate
14
+ getChunkFilenameTemplate,
15
+ getCompilationHooks
17
16
  } = require("../javascript/JavascriptModulesPlugin");
18
17
  const { updateHashForEntryStartup } = require("../javascript/StartupHelpers");
19
18
  const { getUndoPath } = require("../util/identifier");
20
19
 
20
+ /** @typedef {import("webpack-sources").Source} Source */
21
21
  /** @typedef {import("../Chunk")} Chunk */
22
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
23
+ /** @typedef {import("../ChunkGroup")} ChunkGroup */
24
+ /** @typedef {import("../Compilation")} Compilation */
22
25
  /** @typedef {import("../Compiler")} Compiler */
23
26
  /** @typedef {import("../Entrypoint")} Entrypoint */
27
+ /** @typedef {import("../Module")} Module */
28
+ /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
29
+
30
+ /**
31
+ * Gets information about a chunk including its entries and runtime chunk
32
+ * @param {Chunk} chunk The chunk to get information for
33
+ * @param {ChunkGraph} chunkGraph The chunk graph containing the chunk
34
+ * @returns {{entries: Array<[Module, Entrypoint | undefined]>, runtimeChunk: Chunk|null}} Object containing chunk entries and runtime chunk
35
+ */
36
+ function getChunkInfo(chunk, chunkGraph) {
37
+ const entries = [
38
+ ...chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
39
+ ];
40
+ const runtimeChunk =
41
+ entries.length > 0
42
+ ? /** @type {Entrypoint[][]} */
43
+ (entries)[0][1].getRuntimeChunk()
44
+ : null;
45
+
46
+ return {
47
+ entries,
48
+ runtimeChunk
49
+ };
50
+ }
51
+
52
+ /**
53
+ * @param {Compilation} compilation the compilation instance
54
+ * @param {Chunk} chunk the chunk
55
+ * @param {Chunk} runtimeChunk the runtime chunk
56
+ * @returns {string} the relative path
57
+ */
58
+ const getRelativePath = (compilation, chunk, runtimeChunk) => {
59
+ const currentOutputName = compilation
60
+ .getPath(
61
+ getChunkFilenameTemplate(runtimeChunk, compilation.outputOptions),
62
+ {
63
+ chunk: runtimeChunk,
64
+ contentHashType: "javascript"
65
+ }
66
+ )
67
+ .replace(/^\/+/g, "")
68
+ .split("/");
69
+ const baseOutputName = [...currentOutputName];
70
+ const chunkOutputName = compilation
71
+ .getPath(getChunkFilenameTemplate(chunk, compilation.outputOptions), {
72
+ chunk,
73
+ contentHashType: "javascript"
74
+ })
75
+ .replace(/^\/+/g, "")
76
+ .split("/");
77
+
78
+ // remove common parts except filename
79
+ while (
80
+ baseOutputName.length > 1 &&
81
+ chunkOutputName.length > 1 &&
82
+ baseOutputName[0] === chunkOutputName[0]
83
+ ) {
84
+ baseOutputName.shift();
85
+ chunkOutputName.shift();
86
+ }
87
+ const last = chunkOutputName.join("/");
88
+ // create final path
89
+ return getUndoPath(baseOutputName.join("/"), last, true) + last;
90
+ };
91
+
92
+ /**
93
+ * @param {Compilation} compilation the compilation instance
94
+ * @param {Chunk} chunk the chunk to render the import for
95
+ * @param {string=} namedImport the named import to use for the import
96
+ * @param {Chunk=} runtimeChunk the runtime chunk
97
+ * @returns {string} the import source
98
+ */
99
+ function renderChunkImport(compilation, chunk, namedImport, runtimeChunk) {
100
+ return `import ${namedImport ? `* as ${namedImport}` : RuntimeGlobals.require} from ${JSON.stringify(
101
+ getRelativePath(compilation, chunk, runtimeChunk || chunk)
102
+ )};\n`;
103
+ }
104
+
105
+ /**
106
+ * @param {number} index the index of the chunk
107
+ * @returns {string} the named import to use for the import
108
+ */
109
+ function getChunkNamedImport(index) {
110
+ return `__webpack_chunk_${index}__`;
111
+ }
112
+
113
+ const PLUGIN_NAME = "ModuleChunkFormatPlugin";
24
114
 
25
115
  class ModuleChunkFormatPlugin {
26
116
  /**
@@ -29,194 +119,188 @@ class ModuleChunkFormatPlugin {
29
119
  * @returns {void}
30
120
  */
31
121
  apply(compiler) {
32
- compiler.hooks.thisCompilation.tap(
33
- "ModuleChunkFormatPlugin",
34
- compilation => {
35
- compilation.hooks.additionalChunkRuntimeRequirements.tap(
36
- "ModuleChunkFormatPlugin",
37
- (chunk, set) => {
38
- if (chunk.hasRuntime()) return;
39
- if (compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0) {
40
- set.add(RuntimeGlobals.require);
41
- set.add(RuntimeGlobals.startupEntrypoint);
42
- set.add(RuntimeGlobals.externalInstallChunk);
122
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
123
+ compilation.hooks.additionalChunkRuntimeRequirements.tap(
124
+ PLUGIN_NAME,
125
+ (chunk, set) => {
126
+ if (chunk.hasRuntime()) return;
127
+ if (compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0) {
128
+ set.add(RuntimeGlobals.require);
129
+ set.add(RuntimeGlobals.externalInstallChunk);
130
+ }
131
+ }
132
+ );
133
+ const hooks = getCompilationHooks(compilation);
134
+ /**
135
+ * @param {Set<Chunk>} chunks the chunks to render
136
+ * @param {ChunkGraph} chunkGraph the chunk graph
137
+ * @param {Chunk=} runtimeChunk the runtime chunk
138
+ * @returns {Source|undefined} the source
139
+ */
140
+ const withDependentChunks = (chunks, chunkGraph, runtimeChunk) => {
141
+ if (/** @type {Set<Chunk>} */ (chunks).size > 0) {
142
+ const source = new ConcatSource();
143
+ let index = 0;
144
+
145
+ for (const chunk of chunks) {
146
+ index++;
147
+
148
+ if (!chunkHasJs(chunk, chunkGraph)) {
149
+ continue;
43
150
  }
151
+ const namedImport = getChunkNamedImport(index);
152
+ source.add(
153
+ renderChunkImport(
154
+ compilation,
155
+ chunk,
156
+ namedImport,
157
+ runtimeChunk || chunk
158
+ )
159
+ );
160
+ source.add(
161
+ `${RuntimeGlobals.externalInstallChunk}(${namedImport});\n`
162
+ );
44
163
  }
164
+ return source;
165
+ }
166
+ };
167
+ hooks.renderStartup.tap(
168
+ PLUGIN_NAME,
169
+ (modules, _lastModule, renderContext) => {
170
+ const { chunk, chunkGraph } = renderContext;
171
+ if (!chunk.hasRuntime()) {
172
+ return modules;
173
+ }
174
+ const entryDependentChunks =
175
+ chunkGraph.getChunkEntryDependentChunksIterable(chunk);
176
+ const sourceWithDependentChunks = withDependentChunks(
177
+ /** @type {Set<Chunk>} */ (entryDependentChunks),
178
+ chunkGraph,
179
+ chunk
180
+ );
181
+ if (!sourceWithDependentChunks) {
182
+ return modules;
183
+ }
184
+ if (modules.size() === 0) {
185
+ return sourceWithDependentChunks;
186
+ }
187
+ const source = new ConcatSource();
188
+ source.add(sourceWithDependentChunks);
189
+ source.add("\n");
190
+ source.add(modules);
191
+ return source;
192
+ }
193
+ );
194
+ hooks.renderChunk.tap(PLUGIN_NAME, (modules, renderContext) => {
195
+ const { chunk, chunkGraph, runtimeTemplate } = renderContext;
196
+ const hotUpdateChunk = chunk instanceof HotUpdateChunk ? chunk : null;
197
+ const source = new ConcatSource();
198
+ source.add(
199
+ `export const __webpack_id__ = ${JSON.stringify(chunk.id)};\n`
45
200
  );
46
- const hooks = getCompilationHooks(compilation);
47
- hooks.renderChunk.tap(
48
- "ModuleChunkFormatPlugin",
49
- (modules, renderContext) => {
50
- const { chunk, chunkGraph, runtimeTemplate } = renderContext;
51
- const hotUpdateChunk =
52
- chunk instanceof HotUpdateChunk ? chunk : null;
53
- const source = new ConcatSource();
54
- if (hotUpdateChunk) {
55
- throw new Error(
56
- "HMR is not implemented for module chunk format yet"
57
- );
58
- } else {
59
- source.add(
60
- `export const __webpack_id__ = ${JSON.stringify(chunk.id)};\n`
61
- );
62
- source.add(
63
- `export const __webpack_ids__ = ${JSON.stringify(chunk.ids)};\n`
64
- );
65
- source.add("export const __webpack_modules__ = ");
66
- source.add(modules);
67
- source.add(";\n");
68
- const runtimeModules =
69
- chunkGraph.getChunkRuntimeModulesInOrder(chunk);
70
- if (runtimeModules.length > 0) {
71
- source.add("export const __webpack_runtime__ =\n");
72
- source.add(
73
- Template.renderChunkRuntimeModules(
74
- runtimeModules,
75
- renderContext
76
- )
77
- );
78
- }
79
- const entries = Array.from(
80
- chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
81
- );
82
- if (entries.length > 0) {
83
- const runtimeChunk =
84
- /** @type {Entrypoint[][]} */
85
- (entries)[0][1].getRuntimeChunk();
86
- const currentOutputName = compilation
87
- .getPath(
88
- getChunkFilenameTemplate(chunk, compilation.outputOptions),
89
- {
90
- chunk,
91
- contentHashType: "javascript"
92
- }
93
- )
94
- .replace(/^\/+/g, "")
95
- .split("/");
96
-
97
- /**
98
- * @param {Chunk} chunk the chunk
99
- * @returns {string} the relative path
100
- */
101
- const getRelativePath = chunk => {
102
- const baseOutputName = currentOutputName.slice();
103
- const chunkOutputName = compilation
104
- .getPath(
105
- getChunkFilenameTemplate(
106
- chunk,
107
- compilation.outputOptions
108
- ),
109
- {
110
- chunk,
111
- contentHashType: "javascript"
112
- }
113
- )
114
- .replace(/^\/+/g, "")
115
- .split("/");
116
-
117
- // remove common parts except filename
118
- while (
119
- baseOutputName.length > 1 &&
120
- chunkOutputName.length > 1 &&
121
- baseOutputName[0] === chunkOutputName[0]
122
- ) {
123
- baseOutputName.shift();
124
- chunkOutputName.shift();
125
- }
126
- const last = chunkOutputName.join("/");
127
- // create final path
128
- return (
129
- getUndoPath(baseOutputName.join("/"), last, true) + last
130
- );
131
- };
132
-
133
- const entrySource = new ConcatSource();
134
- entrySource.add(source);
135
- entrySource.add(";\n\n// load runtime\n");
136
- entrySource.add(
137
- `import ${RuntimeGlobals.require} from ${JSON.stringify(
138
- getRelativePath(/** @type {Chunk} */ (runtimeChunk))
139
- )};\n`
140
- );
141
-
142
- const startupSource = new ConcatSource();
143
- startupSource.add(
144
- `var __webpack_exec__ = ${runtimeTemplate.returningFunction(
145
- `${RuntimeGlobals.require}(${RuntimeGlobals.entryModuleId} = moduleId)`,
146
- "moduleId"
147
- )}\n`
148
- );
149
-
150
- const loadedChunks = new Set();
151
- let index = 0;
152
- for (let i = 0; i < entries.length; i++) {
153
- const [module, entrypoint] = entries[i];
154
- if (
155
- !chunkGraph.getModuleSourceTypes(module).has("javascript")
156
- ) {
157
- continue;
158
- }
159
- const final = i + 1 === entries.length;
160
- const moduleId = chunkGraph.getModuleId(module);
161
- const chunks = getAllChunks(
162
- /** @type {Entrypoint} */ (entrypoint),
163
- /** @type {Chunk} */ (runtimeChunk),
164
- undefined
165
- );
166
- for (const chunk of chunks) {
167
- if (
168
- loadedChunks.has(chunk) ||
169
- !chunkHasJs(chunk, chunkGraph)
170
- )
171
- continue;
172
- loadedChunks.add(chunk);
173
- startupSource.add(
174
- `import * as __webpack_chunk_${index}__ from ${JSON.stringify(
175
- getRelativePath(chunk)
176
- )};\n`
177
- );
178
- startupSource.add(
179
- `${RuntimeGlobals.externalInstallChunk}(__webpack_chunk_${index}__);\n`
180
- );
181
- index++;
182
- }
183
- startupSource.add(
184
- `${
185
- final ? `var ${RuntimeGlobals.exports} = ` : ""
186
- }__webpack_exec__(${JSON.stringify(moduleId)});\n`
187
- );
188
- }
189
-
190
- entrySource.add(
191
- hooks.renderStartup.call(
192
- startupSource,
193
- entries[entries.length - 1][0],
194
- {
195
- ...renderContext,
196
- inlined: false
197
- }
198
- )
199
- );
200
- return entrySource;
201
+ source.add(
202
+ `export const __webpack_ids__ = ${JSON.stringify(chunk.ids)};\n`
203
+ );
204
+ source.add("export const __webpack_modules__ = ");
205
+ source.add(modules);
206
+ source.add(";\n");
207
+ const runtimeModules = chunkGraph.getChunkRuntimeModulesInOrder(chunk);
208
+ if (runtimeModules.length > 0) {
209
+ source.add("export const __webpack_runtime__ =\n");
210
+ source.add(
211
+ Template.renderChunkRuntimeModules(runtimeModules, renderContext)
212
+ );
213
+ }
214
+ if (hotUpdateChunk) {
215
+ return source;
216
+ }
217
+ const { entries, runtimeChunk } = getChunkInfo(chunk, chunkGraph);
218
+ if (runtimeChunk) {
219
+ const entrySource = new ConcatSource();
220
+ entrySource.add(source);
221
+ entrySource.add(";\n\n// load runtime\n");
222
+ entrySource.add(
223
+ renderChunkImport(compilation, runtimeChunk, "", chunk)
224
+ );
225
+ const startupSource = new ConcatSource();
226
+ startupSource.add(
227
+ `var __webpack_exec__ = ${runtimeTemplate.returningFunction(
228
+ `${RuntimeGlobals.require}(${RuntimeGlobals.entryModuleId} = moduleId)`,
229
+ "moduleId"
230
+ )}\n`
231
+ );
232
+
233
+ const loadedChunks = new Set();
234
+ for (let i = 0; i < entries.length; i++) {
235
+ const [module, entrypoint] = entries[i];
236
+ if (!chunkGraph.getModuleSourceTypes(module).has("javascript")) {
237
+ continue;
238
+ }
239
+ const final = i + 1 === entries.length;
240
+ const moduleId = chunkGraph.getModuleId(module);
241
+ const entryDependentChunks = /** @type {Set<Chunk>} */ (
242
+ chunkGraph.getChunkEntryDependentChunksIterable(chunk)
243
+ );
244
+ const chunks = getAllChunks(
245
+ /** @type {Entrypoint} */ (entrypoint),
246
+ /** @type {Chunk} */ (runtimeChunk),
247
+ undefined
248
+ );
249
+ const processChunks = new Set();
250
+ for (const _chunk of chunks) {
251
+ if (
252
+ loadedChunks.has(_chunk) ||
253
+ entryDependentChunks.has(_chunk)
254
+ ) {
255
+ continue;
201
256
  }
257
+ loadedChunks.add(_chunk);
258
+ processChunks.add(_chunk);
202
259
  }
203
- return source;
204
- }
205
- );
206
- hooks.chunkHash.tap(
207
- "ModuleChunkFormatPlugin",
208
- (chunk, hash, { chunkGraph, runtimeTemplate }) => {
209
- if (chunk.hasRuntime()) return;
210
- hash.update("ModuleChunkFormatPlugin");
211
- hash.update("1");
212
- const entries = Array.from(
213
- chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
260
+ const sourceWithDependentChunks = withDependentChunks(
261
+ processChunks,
262
+ chunkGraph,
263
+ chunk
264
+ );
265
+ if (sourceWithDependentChunks) {
266
+ startupSource.add("\n");
267
+ startupSource.add(sourceWithDependentChunks);
268
+ }
269
+ startupSource.add(
270
+ `${
271
+ final ? `var ${RuntimeGlobals.exports} = ` : ""
272
+ }__webpack_exec__(${JSON.stringify(moduleId)});\n`
214
273
  );
215
- updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
216
274
  }
217
- );
218
- }
219
- );
275
+
276
+ entrySource.add(
277
+ hooks.renderStartup.call(
278
+ startupSource,
279
+ entries[entries.length - 1][0],
280
+ {
281
+ ...renderContext,
282
+ inlined: false
283
+ }
284
+ )
285
+ );
286
+ return entrySource;
287
+ }
288
+ return source;
289
+ });
290
+ hooks.chunkHash.tap(PLUGIN_NAME, (chunk, hash, { chunkGraph }) => {
291
+ if (chunk.hasRuntime()) return;
292
+ const { entries, runtimeChunk } = getChunkInfo(chunk, chunkGraph);
293
+ hash.update(PLUGIN_NAME);
294
+ hash.update("1");
295
+ if (runtimeChunk && runtimeChunk.hash) {
296
+ // Any change to runtimeChunk should trigger a hash update,
297
+ // we shouldn't depend on or inspect its internal implementation.
298
+ // import __webpack_require__ from "./runtime-main.e9400aee33633a3973bd.js";
299
+ hash.update(runtimeChunk.hash);
300
+ }
301
+ updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
302
+ });
303
+ });
220
304
  }
221
305
  }
222
306
 
@@ -63,10 +63,19 @@ class ModuleChunkLoadingPlugin {
63
63
  compilation.hooks.runtimeRequirementInTree
64
64
  .for(RuntimeGlobals.onChunksLoaded)
65
65
  .tap(PLUGIN_NAME, handler);
66
+ compilation.hooks.runtimeRequirementInTree
67
+ .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
68
+ .tap(PLUGIN_NAME, handler);
69
+ compilation.hooks.runtimeRequirementInTree
70
+ .for(RuntimeGlobals.hmrDownloadManifest)
71
+ .tap(PLUGIN_NAME, handler);
66
72
  compilation.hooks.runtimeRequirementInTree
67
73
  .for(RuntimeGlobals.externalInstallChunk)
68
- .tap(PLUGIN_NAME, (chunk, set) => {
74
+ .tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
69
75
  if (!isEnabledForChunk(chunk)) return;
76
+ // If a chunk contains an entryModule, all exports are determined by the entryModule.
77
+ // The ExportWebpackRequireRuntimeModule is for internal use only and not exposed to users.
78
+ if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return;
70
79
  compilation.addRuntimeModule(
71
80
  chunk,
72
81
  new ExportWebpackRequireRuntimeModule()
@@ -99,6 +108,35 @@ class ModuleChunkLoadingPlugin {
99
108
 
100
109
  set.add(RuntimeGlobals.getChunkScriptFilename);
101
110
  });
111
+
112
+ compilation.hooks.runtimeRequirementInTree
113
+ .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
114
+ .tap(PLUGIN_NAME, (chunk, set) => {
115
+ if (!isEnabledForChunk(chunk)) return;
116
+ set.add(RuntimeGlobals.publicPath);
117
+ set.add(RuntimeGlobals.loadScript);
118
+ set.add(RuntimeGlobals.getChunkUpdateScriptFilename);
119
+ set.add(RuntimeGlobals.moduleCache);
120
+ set.add(RuntimeGlobals.hmrModuleData);
121
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
122
+ });
123
+
124
+ compilation.hooks.runtimeRequirementInTree
125
+ .for(RuntimeGlobals.hmrDownloadManifest)
126
+ .tap(PLUGIN_NAME, (chunk, set) => {
127
+ if (!isEnabledForChunk(chunk)) return;
128
+ set.add(RuntimeGlobals.publicPath);
129
+ set.add(RuntimeGlobals.getUpdateManifestFilename);
130
+ });
131
+
132
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(
133
+ PLUGIN_NAME,
134
+ (chunk, set, { chunkGraph }) => {
135
+ if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
136
+ set.add(RuntimeGlobals.externalInstallChunk);
137
+ }
138
+ }
139
+ );
102
140
  });
103
141
  }
104
142
  }
@@ -10,8 +10,11 @@ const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const RuntimeModule = require("../RuntimeModule");
11
11
  const Template = require("../Template");
12
12
  const {
13
- getChunkFilenameTemplate,
14
- chunkHasJs
13
+ generateJavascriptHMR
14
+ } = require("../hmr/JavascriptHotModuleReplacementHelper");
15
+ const {
16
+ chunkHasJs,
17
+ getChunkFilenameTemplate
15
18
  } = require("../javascript/JavascriptModulesPlugin");
16
19
  const { getInitialChunkIds } = require("../javascript/StartupHelpers");
17
20
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
@@ -109,6 +112,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
109
112
  const withHmr = this._runtimeRequirements.has(
110
113
  RuntimeGlobals.hmrDownloadUpdateHandlers
111
114
  );
115
+ const withHmrManifest = this._runtimeRequirements.has(
116
+ RuntimeGlobals.hmrDownloadManifest
117
+ );
112
118
  const { linkPreload, linkPrefetch } =
113
119
  ModuleChunkLoadingRuntimeModule.getCompilationHooks(compilation);
114
120
  const isNeutralPlatform = runtimeTemplate.isNeutralPlatform();
@@ -216,9 +222,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
216
222
  "// setup Promise in chunk cache",
217
223
  `var promise = ${importFunctionName}(${
218
224
  compilation.outputOptions.publicPath === "auto"
219
- ? ""
220
- : `${RuntimeGlobals.publicPath} + `
221
- }${JSON.stringify(rootOutputDir)} + ${
225
+ ? JSON.stringify(rootOutputDir)
226
+ : RuntimeGlobals.publicPath
227
+ } + ${
222
228
  RuntimeGlobals.getChunkScriptFilename
223
229
  }(chunkId)).then(installChunk, ${runtimeTemplate.basicFunction(
224
230
  "e",
@@ -346,7 +352,68 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
346
352
  "installedChunks[chunkId] === 0",
347
353
  "chunkId"
348
354
  )};`
349
- : "// no on chunks loaded"
355
+ : "// no on chunks loaded",
356
+ withHmr
357
+ ? Template.asString([
358
+ generateJavascriptHMR("module"),
359
+ "",
360
+ "function loadUpdateChunk(chunkId, updatedModulesList) {",
361
+ Template.indent([
362
+ `return new Promise(${runtimeTemplate.basicFunction(
363
+ "resolve, reject",
364
+ [
365
+ "// start update chunk loading",
366
+ `var url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkUpdateScriptFilename}(chunkId);`,
367
+ `var onResolve = ${runtimeTemplate.basicFunction("obj", [
368
+ "var updatedModules = obj.__webpack_modules__;",
369
+ "var updatedRuntime = obj.__webpack_runtime__;",
370
+ "if(updatedRuntime) currentUpdateRuntime.push(updatedRuntime);",
371
+ "for(var moduleId in updatedModules) {",
372
+ Template.indent([
373
+ `if(${RuntimeGlobals.hasOwnProperty}(updatedModules, moduleId)) {`,
374
+ Template.indent([
375
+ "currentUpdate[moduleId] = updatedModules[moduleId];",
376
+ "if(updatedModulesList) updatedModulesList.push(moduleId);"
377
+ ]),
378
+ "}"
379
+ ]),
380
+ "}",
381
+ "resolve(obj);"
382
+ ])};`,
383
+ `var onReject = ${runtimeTemplate.basicFunction("error", [
384
+ "var errorMsg = error.message || 'unknown reason';",
385
+ "error.message = 'Loading hot update chunk ' + chunkId + ' failed.\\n(' + errorMsg + ')';",
386
+ "error.name = 'ChunkLoadError';",
387
+ "reject(error);"
388
+ ])}`,
389
+ `var loadScript = ${runtimeTemplate.basicFunction(
390
+ "url, onResolve, onReject",
391
+ [
392
+ `return ${importFunctionName}(/* webpackIgnore: true */ url).then(onResolve).catch(onReject)`
393
+ ]
394
+ )}
395
+ loadScript(url, onResolve, onReject);`
396
+ ]
397
+ )});`
398
+ ]),
399
+ "}",
400
+ ""
401
+ ])
402
+ : "// no HMR",
403
+ "",
404
+ withHmrManifest
405
+ ? Template.asString([
406
+ `${
407
+ RuntimeGlobals.hmrDownloadManifest
408
+ } = ${runtimeTemplate.basicFunction("", [
409
+ `return ${importFunctionName}(/* webpackIgnore: true */ ${RuntimeGlobals.publicPath} + ${
410
+ RuntimeGlobals.getUpdateManifestFilename
411
+ }()).then(${runtimeTemplate.basicFunction("obj", [
412
+ "return obj.default;"
413
+ ])});`
414
+ ])};`
415
+ ])
416
+ : "// no HMR manifest"
350
417
  ]);
351
418
  }
352
419
  }
@@ -8,7 +8,6 @@
8
8
 
9
9
  var $interceptModuleExecution$ = undefined;
10
10
  var $moduleCache$ = undefined;
11
- // eslint-disable-next-line no-unused-vars
12
11
  var $hmrModuleData$ = undefined;
13
12
  /** @type {() => Promise} */
14
13
  var $hmrDownloadManifest$ = undefined;
@@ -19,7 +19,7 @@ class HotModuleReplacementRuntimeModule extends RuntimeModule {
19
19
  */
20
20
  generate() {
21
21
  return Template.getFunctionContent(
22
- require("./HotModuleReplacement.runtime.js")
22
+ require("./HotModuleReplacement.runtime")
23
23
  )
24
24
  .replace(
25
25
  /\$interceptModuleExecution\$/g,