UNPKG

3.24 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const RuntimeGlobals = require("../RuntimeGlobals");
9const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
10const ImportScriptsChunkLoadingRuntimeModule = require("./ImportScriptsChunkLoadingRuntimeModule");
11
12/** @typedef {import("../Compiler")} Compiler */
13
14class ImportScriptsChunkLoadingPlugin {
15 /**
16 * Apply the plugin
17 * @param {Compiler} compiler the compiler instance
18 * @returns {void}
19 */
20 apply(compiler) {
21 new StartupChunkDependenciesPlugin({
22 chunkLoading: "import-scripts",
23 asyncChunkLoading: true
24 }).apply(compiler);
25 compiler.hooks.thisCompilation.tap(
26 "ImportScriptsChunkLoadingPlugin",
27 compilation => {
28 const globalChunkLoading = compilation.outputOptions.chunkLoading;
29 const isEnabledForChunk = chunk => {
30 const options = chunk.getEntryOptions();
31 const chunkLoading =
32 (options && options.chunkLoading) || globalChunkLoading;
33 return chunkLoading === "import-scripts";
34 };
35 const onceForChunkSet = new WeakSet();
36 const handler = (chunk, set) => {
37 if (onceForChunkSet.has(chunk)) return;
38 onceForChunkSet.add(chunk);
39 if (!isEnabledForChunk(chunk)) return;
40 set.add(RuntimeGlobals.moduleFactoriesAddOnly);
41 set.add(RuntimeGlobals.hasOwnProperty);
42 compilation.addRuntimeModule(
43 chunk,
44 new ImportScriptsChunkLoadingRuntimeModule(set)
45 );
46 };
47 compilation.hooks.runtimeRequirementInTree
48 .for(RuntimeGlobals.ensureChunkHandlers)
49 .tap("ImportScriptsChunkLoadingPlugin", handler);
50 compilation.hooks.runtimeRequirementInTree
51 .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
52 .tap("ImportScriptsChunkLoadingPlugin", handler);
53 compilation.hooks.runtimeRequirementInTree
54 .for(RuntimeGlobals.hmrDownloadManifest)
55 .tap("ImportScriptsChunkLoadingPlugin", handler);
56 compilation.hooks.runtimeRequirementInTree
57 .for(RuntimeGlobals.baseURI)
58 .tap("ImportScriptsChunkLoadingPlugin", handler);
59
60 compilation.hooks.runtimeRequirementInTree
61 .for(RuntimeGlobals.ensureChunkHandlers)
62 .tap("ImportScriptsChunkLoadingPlugin", (chunk, set) => {
63 if (!isEnabledForChunk(chunk)) return;
64 set.add(RuntimeGlobals.publicPath);
65 set.add(RuntimeGlobals.getChunkScriptFilename);
66 });
67 compilation.hooks.runtimeRequirementInTree
68 .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
69 .tap("ImportScriptsChunkLoadingPlugin", (chunk, set) => {
70 if (!isEnabledForChunk(chunk)) return;
71 set.add(RuntimeGlobals.publicPath);
72 set.add(RuntimeGlobals.getChunkUpdateScriptFilename);
73 set.add(RuntimeGlobals.moduleCache);
74 set.add(RuntimeGlobals.hmrModuleData);
75 set.add(RuntimeGlobals.moduleFactoriesAddOnly);
76 });
77 compilation.hooks.runtimeRequirementInTree
78 .for(RuntimeGlobals.hmrDownloadManifest)
79 .tap("ImportScriptsChunkLoadingPlugin", (chunk, set) => {
80 if (!isEnabledForChunk(chunk)) return;
81 set.add(RuntimeGlobals.publicPath);
82 set.add(RuntimeGlobals.getUpdateManifestFilename);
83 });
84 }
85 );
86 }
87}
88module.exports = ImportScriptsChunkLoadingPlugin;