| | |
| | | /** @typedef {import("../Compiler")} Compiler */ |
| | | |
| | | /** |
| | | * Options that describe which chunk loading backend should receive startup |
| | | * dependency handling and whether the runtime should wait for those chunks |
| | | * asynchronously. |
| | | * @typedef {object} Options |
| | | * @property {ChunkLoadingType} chunkLoading |
| | | * @property {boolean=} asyncChunkLoading |
| | |
| | | |
| | | const PLUGIN_NAME = "StartupChunkDependenciesPlugin"; |
| | | |
| | | /** |
| | | * Adds runtime modules that delay entry startup until entry-dependent chunks |
| | | * required by the selected chunk loading strategy have been loaded. |
| | | */ |
| | | class StartupChunkDependenciesPlugin { |
| | | /** |
| | | * Configures which chunk loading implementation this plugin should enhance |
| | | * and whether startup waits should use promises or synchronous ensures. |
| | | * @param {Options} options options |
| | | */ |
| | | constructor(options) { |
| | | /** @type {ChunkLoadingType} */ |
| | | this.chunkLoading = options.chunkLoading; |
| | | /** @type {boolean} */ |
| | | this.asyncChunkLoading = |
| | | typeof options.asyncChunkLoading === "boolean" |
| | | ? options.asyncChunkLoading |
| | |
| | | } |
| | | |
| | | /** |
| | | * Apply the plugin |
| | | * Registers compilation hooks that attach the startup dependency runtime |
| | | * modules to entry chunks using the configured chunk loading mechanism. |
| | | * @param {Compiler} compiler the compiler instance |
| | | * @returns {void} |
| | | */ |
| | |
| | | compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => { |
| | | const globalChunkLoading = compilation.outputOptions.chunkLoading; |
| | | /** |
| | | * Determines whether a chunk uses the chunk loading backend that this |
| | | * plugin is responsible for augmenting. |
| | | * @param {Chunk} chunk chunk to check |
| | | * @returns {boolean} true, when the plugin is enabled for the chunk |
| | | */ |