From 402cf189cef50c2447669d65e48fc241e2d56229 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 23 Aug 2018 16:54:02 +0200 Subject: [PATCH] use JavascriptModulesPluginHooks.shouldRender correctly --- lib/DelegatedModule.js | 6 +++--- lib/DllModule.js | 3 +-- lib/DllModuleFactory.js | 7 +------ lib/JavascriptModulesPlugin.js | 27 ++++++++++++++++++++++----- lib/JsonModulesPlugin.js | 5 +++++ 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/DelegatedModule.js b/lib/DelegatedModule.js index e6ccd4107..1ba54ac98 100644 --- a/lib/DelegatedModule.js +++ b/lib/DelegatedModule.js @@ -28,7 +28,7 @@ class DelegatedModule extends Module { // Info from Factory this.sourceRequest = sourceRequest; this.request = data.id; - this.type = type; + this.delegationType = type; this.userRequest = userRequest; this.originalRequest = originalRequest; this.delegateData = data; @@ -113,7 +113,7 @@ class DelegatedModule extends Module { request: dep.request })})`; - switch (this.type) { + switch (this.delegationType) { case "require": str += `(${JSON.stringify(this.request)})`; break; @@ -145,7 +145,7 @@ class DelegatedModule extends Module { * @returns {void} */ updateHash(hash, compilation) { - hash.update(this.type); + hash.update(this.delegationType); hash.update(JSON.stringify(this.request)); super.updateHash(hash, compilation); } diff --git a/lib/DllModule.js b/lib/DllModule.js index a486d19e9..488cfc435 100644 --- a/lib/DllModule.js +++ b/lib/DllModule.js @@ -17,13 +17,12 @@ const Module = require("./Module"); /** @typedef {import("./util/createHash").Hash} Hash */ class DllModule extends Module { - constructor(context, dependencies, name, type) { + constructor(context, dependencies, name) { super("javascript/dynamic", context); // Info from Factory this.dependencies = dependencies; this.name = name; - this.type = type; } /** diff --git a/lib/DllModuleFactory.js b/lib/DllModuleFactory.js index 216afe695..e7b073b92 100644 --- a/lib/DllModuleFactory.js +++ b/lib/DllModuleFactory.js @@ -15,12 +15,7 @@ class DllModuleFactory { const dependency = data.dependencies[0]; callback( null, - new DllModule( - data.context, - dependency.dependencies, - dependency.name, - dependency.type - ) + new DllModule(data.context, dependency.dependencies, dependency.name) ); } } diff --git a/lib/JavascriptModulesPlugin.js b/lib/JavascriptModulesPlugin.js index 80d0627a8..8ebd49018 100644 --- a/lib/JavascriptModulesPlugin.js +++ b/lib/JavascriptModulesPlugin.js @@ -15,15 +15,27 @@ const { compareModulesById } = require("./util/comparators"); const createHash = require("./util/createHash"); /** @typedef {import("webpack-sources").Source} Source */ +/** @typedef {import("./Chunk")} Chunk */ /** @typedef {import("./ChunkTemplate")} ChunkTemplate */ /** @typedef {import("./Compiler")} Compiler */ +/** @typedef {import("./Module")} Module */ /** @typedef {import("./ModuleTemplate")} ModuleTemplate */ /** @typedef {import("./ModuleTemplate").RenderContext} RenderContext */ /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ +/** + * @typedef {Object} JavascriptModulesPluginHooks + * @property {SyncBailHook} shouldRender + */ + +/** @type {WeakMap} */ const compilationHooksMap = new WeakMap(); class JavascriptModulesPlugin { + /** + * @param {Compilation} compilation the compilation + * @returns {JavascriptModulesPluginHooks} hooks + */ static getHooks(compilation) { if (!(compilation instanceof Compilation)) { throw new TypeError( @@ -125,9 +137,10 @@ class JavascriptModulesPlugin { compilation.mainTemplate.hooks.modules.tap( "JavascriptModulesPlugin", (source, moduleTemplate, renderContext) => { + const chunk = renderContext.chunk; return Template.renderChunkModules( renderContext, - m => typeof m.source === "function", + m => hooks.shouldRender.call(m, chunk), moduleTemplate, "/******/ " ); @@ -153,6 +166,7 @@ class JavascriptModulesPlugin { result.push({ render: () => this.renderJavascript( + compilation, compilation.chunkTemplate, moduleTemplates.javascript, { @@ -197,7 +211,7 @@ class JavascriptModulesPlugin { chunk, compareModulesById(moduleGraph) )) { - if (typeof m.source === "function") { + if (hooks.shouldRender.call(m, chunk)) { hash.update(chunkGraph.getModuleHash(m)); } } @@ -210,15 +224,19 @@ class JavascriptModulesPlugin { } /** + * @param {Compilation} compilation the compilation * @param {ChunkTemplate} chunkTemplate the chunk template * @param {ModuleTemplate} moduleTemplate the module template * @param {RenderContext} renderContext the render context * @returns {Source} the rendered source */ - renderJavascript(chunkTemplate, moduleTemplate, renderContext) { + renderJavascript(compilation, chunkTemplate, moduleTemplate, renderContext) { + const hooks = JavascriptModulesPlugin.getHooks(compilation); + + const chunk = renderContext.chunk; const moduleSources = Template.renderChunkModules( renderContext, - m => typeof m.source === "function", + m => hooks.shouldRender.call(m, chunk), moduleTemplate ); const core = chunkTemplate.hooks.modules.call( @@ -231,7 +249,6 @@ class JavascriptModulesPlugin { moduleTemplate, renderContext ); - const chunk = renderContext.chunk; if (renderContext.chunkGraph.getNumberOfEntryModules(chunk) > 0) { source = chunkTemplate.hooks.renderWithEntry.call(source, chunk); } diff --git a/lib/JsonModulesPlugin.js b/lib/JsonModulesPlugin.js index 29dcf22a9..9aa77d086 100644 --- a/lib/JsonModulesPlugin.js +++ b/lib/JsonModulesPlugin.js @@ -5,6 +5,7 @@ "use strict"; +const JavascriptModulesPlugin = require("./JavascriptModulesPlugin"); const JsonGenerator = require("./JsonGenerator"); const JsonParser = require("./JsonParser"); @@ -13,6 +14,10 @@ class JsonModulesPlugin { compiler.hooks.compilation.tap( "JsonModulesPlugin", (compilation, { normalModuleFactory }) => { + const hooks = JavascriptModulesPlugin.getHooks(compilation); + hooks.shouldRender.tap("JavascriptModulesPlugin", module => { + if (module.type === "json") return true; + }); normalModuleFactory.hooks.createParser .for("json") .tap("JsonModulesPlugin", () => {