From 39c38a47a22c91afda933e1988a81abe63cfb232 Mon Sep 17 00:00:00 2001 From: Jan Nicklas Date: Thu, 9 Apr 2020 17:20:24 +0200 Subject: [PATCH] feat: Add webpack 5 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Putzi San Co-authored-by: Øyvind Saltvik --- .travis.yml | 8 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes examples/appcache/dist/webpack-5/bundle.js | 47 ++ examples/appcache/dist/webpack-5/index.html | 1 + .../appcache/dist/webpack-5/manifest.appcache | 9 + examples/appcache/dist/webpack-5/styles.css | 3 + examples/appcache/webpack.config.js | 2 +- examples/build-examples.js | 2 +- .../chunk-optimization/dist/webpack-5/73.js | 40 ++ .../chunk-optimization/dist/webpack-5/805.js | 596 ++++++++++++++++ .../dist/webpack-5/entryA.html | 1 + .../dist/webpack-5/entryA.js | 152 ++++ .../dist/webpack-5/entryB.html | 1 + .../dist/webpack-5/entryB.js | 151 ++++ .../dist/webpack-5/entryC.html | 1 + .../dist/webpack-5/libMath.js | 28 + .../dist/webpack-5/libText.js | 13 + examples/chunk-optimization/webpack.config.js | 4 +- .../dist/webpack-5/bundle.js | 7 + .../dist/webpack-5/index.html | 12 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes .../custom-template/dist/webpack-5/bundle.js | 47 ++ .../custom-template/dist/webpack-5/index.html | 1 + .../custom-template/dist/webpack-5/styles.css | 3 + examples/default/dist/webpack-5/bundle.js | 669 ++++++++++++++++++ examples/default/dist/webpack-5/index.html | 1 + examples/default/webpack.config.js | 2 +- examples/favicon/dist/webpack-5/bundle.js | 47 ++ examples/favicon/dist/webpack-5/favicon.html | 1 + examples/favicon/dist/webpack-5/favicon.ico | Bin 0 -> 766 bytes examples/favicon/dist/webpack-5/styles.css | 3 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes .../html-loader/dist/webpack-5/about.html | 1 + examples/html-loader/dist/webpack-5/bundle.js | 47 ++ .../html-loader/dist/webpack-5/favicon.ico | Bin 0 -> 766 bytes .../html-loader/dist/webpack-5/index.html | 1 + .../html-loader/dist/webpack-5/styles.css | 3 + examples/inline/dist/webpack-5/bundle.js | 48 ++ examples/inline/dist/webpack-5/favicon.ico | Bin 0 -> 766 bytes examples/inline/dist/webpack-5/index.html | 50 ++ examples/inline/dist/webpack-5/styles.css | 3 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes .../dist/webpack-5/bundle.js | 59 ++ .../dist/webpack-5/index.html | 1 + .../dist/webpack-5/styles.css | 3 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes examples/javascript/dist/webpack-5/bundle.js | 59 ++ examples/javascript/dist/webpack-5/index.html | 1 + examples/javascript/dist/webpack-5/styles.css | 3 + examples/pug-loader/dist/webpack-5/bundle.js | 333 +++++++++ .../pug-loader/dist/webpack-5/favicon.ico | Bin 0 -> 766 bytes examples/pug-loader/dist/webpack-5/index.html | 1 + examples/pug-loader/dist/webpack-5/styles.css | 3 + .../0714810ae3fb211173e2964249507195.png | Bin 0 -> 54055 bytes examples/sort-manually/dist/webpack-5/a.js | 47 ++ examples/sort-manually/dist/webpack-5/b.js | 8 + examples/sort-manually/dist/webpack-5/c.js | 8 + examples/sort-manually/dist/webpack-5/d.js | 8 + examples/sort-manually/dist/webpack-5/e.js | 8 + .../dist/webpack-5/first-file.html | 1 + .../dist/webpack-5/second-file.html | 1 + .../sort-manually/dist/webpack-5/styles.css | 3 + .../dist/webpack-5/bundle.js | 7 + .../dist/webpack-5/index.html | 1 + index.js | 99 +-- lib/cached-child-compiler.js | 379 ++++++++++ lib/child-compiler.js | 183 +++++ lib/compiler.js | 356 ---------- lib/file-watcher-api.js | 14 + lib/webpack4/file-watcher-api.js | 64 ++ lib/webpack5/file-watcher-api.js | 71 ++ package.json | 6 +- spec/basic.spec.js | 41 +- spec/caching.spec.js | 2 +- spec/hot.spec.js | 4 +- tsconfig.json | 7 +- 76 files changed, 3334 insertions(+), 452 deletions(-) create mode 100644 examples/appcache/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/appcache/dist/webpack-5/bundle.js create mode 100644 examples/appcache/dist/webpack-5/index.html create mode 100644 examples/appcache/dist/webpack-5/manifest.appcache create mode 100644 examples/appcache/dist/webpack-5/styles.css create mode 100644 examples/chunk-optimization/dist/webpack-5/73.js create mode 100644 examples/chunk-optimization/dist/webpack-5/805.js create mode 100644 examples/chunk-optimization/dist/webpack-5/entryA.html create mode 100644 examples/chunk-optimization/dist/webpack-5/entryA.js create mode 100644 examples/chunk-optimization/dist/webpack-5/entryB.html create mode 100644 examples/chunk-optimization/dist/webpack-5/entryB.js create mode 100644 examples/chunk-optimization/dist/webpack-5/entryC.html create mode 100644 examples/chunk-optimization/dist/webpack-5/libMath.js create mode 100644 examples/chunk-optimization/dist/webpack-5/libText.js create mode 100644 examples/custom-insertion-position/dist/webpack-5/bundle.js create mode 100644 examples/custom-insertion-position/dist/webpack-5/index.html create mode 100644 examples/custom-template/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/custom-template/dist/webpack-5/bundle.js create mode 100644 examples/custom-template/dist/webpack-5/index.html create mode 100644 examples/custom-template/dist/webpack-5/styles.css create mode 100644 examples/default/dist/webpack-5/bundle.js create mode 100644 examples/default/dist/webpack-5/index.html create mode 100644 examples/favicon/dist/webpack-5/bundle.js create mode 100644 examples/favicon/dist/webpack-5/favicon.html create mode 100644 examples/favicon/dist/webpack-5/favicon.ico create mode 100644 examples/favicon/dist/webpack-5/styles.css create mode 100644 examples/html-loader/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/html-loader/dist/webpack-5/about.html create mode 100644 examples/html-loader/dist/webpack-5/bundle.js create mode 100644 examples/html-loader/dist/webpack-5/favicon.ico create mode 100644 examples/html-loader/dist/webpack-5/index.html create mode 100644 examples/html-loader/dist/webpack-5/styles.css create mode 100644 examples/inline/dist/webpack-5/bundle.js create mode 100644 examples/inline/dist/webpack-5/favicon.ico create mode 100644 examples/inline/dist/webpack-5/index.html create mode 100644 examples/inline/dist/webpack-5/styles.css create mode 100644 examples/javascript-advanced/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/javascript-advanced/dist/webpack-5/bundle.js create mode 100644 examples/javascript-advanced/dist/webpack-5/index.html create mode 100644 examples/javascript-advanced/dist/webpack-5/styles.css create mode 100644 examples/javascript/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/javascript/dist/webpack-5/bundle.js create mode 100644 examples/javascript/dist/webpack-5/index.html create mode 100644 examples/javascript/dist/webpack-5/styles.css create mode 100644 examples/pug-loader/dist/webpack-5/bundle.js create mode 100644 examples/pug-loader/dist/webpack-5/favicon.ico create mode 100644 examples/pug-loader/dist/webpack-5/index.html create mode 100644 examples/pug-loader/dist/webpack-5/styles.css create mode 100644 examples/sort-manually/dist/webpack-5/0714810ae3fb211173e2964249507195.png create mode 100644 examples/sort-manually/dist/webpack-5/a.js create mode 100644 examples/sort-manually/dist/webpack-5/b.js create mode 100644 examples/sort-manually/dist/webpack-5/c.js create mode 100644 examples/sort-manually/dist/webpack-5/d.js create mode 100644 examples/sort-manually/dist/webpack-5/e.js create mode 100644 examples/sort-manually/dist/webpack-5/first-file.html create mode 100644 examples/sort-manually/dist/webpack-5/second-file.html create mode 100644 examples/sort-manually/dist/webpack-5/styles.css create mode 100644 examples/template-parameters/dist/webpack-5/bundle.js create mode 100644 examples/template-parameters/dist/webpack-5/index.html create mode 100644 lib/cached-child-compiler.js create mode 100644 lib/child-compiler.js delete mode 100644 lib/compiler.js create mode 100644 lib/file-watcher-api.js create mode 100644 lib/webpack4/file-watcher-api.js create mode 100644 lib/webpack5/file-watcher-api.js diff --git a/.travis.yml b/.travis.yml index b4267b3e..0e114d3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,17 @@ node_js: - stable - lts/* - 6.9 +env: + - WEBPACK_CORE=4 + - WEBPACK_CORE=beta +jobs: + exclude: + - node_js: 6.9 + env: WEBPACK_CORE=beta before_install: - stty columns 120 install: - travis_retry npm install --ignore-scripts + - travis_retry npm install "webpack@$WEBPACK_CORE" --ignore-scripts script: - travis_retry npm test diff --git a/examples/appcache/dist/webpack-5/0714810ae3fb211173e2964249507195.png b/examples/appcache/dist/webpack-5/0714810ae3fb211173e2964249507195.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b3d789f45d8f124a1fde57a36e55855a6dcb5 GIT binary patch literal 54055 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 Duf!qe literal 0 HcmV?d00001 diff --git a/examples/appcache/dist/webpack-5/bundle.js b/examples/appcache/dist/webpack-5/bundle.js new file mode 100644 index 00000000..9ae17651 --- /dev/null +++ b/examples/appcache/dist/webpack-5/bundle.js @@ -0,0 +1,47 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 636: +/***/ (() => { + +// extracted by mini-css-extract-plugin + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /************************************************************************/ +(() => { +__webpack_require__(636); +var h1 = document.createElement('h1'); +h1.innerHTML = 'Hello world!'; +document.body.appendChild(h1); + +})(); + +/******/ })() +; \ No newline at end of file diff --git a/examples/appcache/dist/webpack-5/index.html b/examples/appcache/dist/webpack-5/index.html new file mode 100644 index 00000000..3a2aa9e5 --- /dev/null +++ b/examples/appcache/dist/webpack-5/index.html @@ -0,0 +1 @@ +Example template \ No newline at end of file diff --git a/examples/appcache/dist/webpack-5/manifest.appcache b/examples/appcache/dist/webpack-5/manifest.appcache new file mode 100644 index 00000000..d9dc95c2 --- /dev/null +++ b/examples/appcache/dist/webpack-5/manifest.appcache @@ -0,0 +1,9 @@ +CACHE MANIFEST +# f509954c60c2fd048c91 + +0714810ae3fb211173e2964249507195.png +styles.css +bundle.js + +NETWORK: +* diff --git a/examples/appcache/dist/webpack-5/styles.css b/examples/appcache/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/appcache/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/appcache/webpack.config.js b/examples/appcache/webpack.config.js index 980ebfd5..449a6cf9 100755 --- a/examples/appcache/webpack.config.js +++ b/examples/appcache/webpack.config.js @@ -16,7 +16,7 @@ module.exports = { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] }, { test: /\.png$/, loader: 'file-loader' }, - { test: /\.html$/, loader: 'html-loader?-removeOptionalTags' } + { test: /\.html$/, loader: 'html-loader', options: { removeOptionalTags: false } } ] }, plugins: [ diff --git a/examples/build-examples.js b/examples/build-examples.js index b1deff37..0e45b0bd 100644 --- a/examples/build-examples.js +++ b/examples/build-examples.js @@ -20,7 +20,7 @@ examples.forEach(function (exampleName) { var configFile = path.join(examplePath, 'webpack.config.js'); var config = require(configFile); - if (webpackMajorVersion === '4') { + if (Number(webpackMajorVersion) >= 4) { config.plugins.unshift(new webpack.LoaderOptionsPlugin({ options: { context: process.cwd() // or the same value as `context` diff --git a/examples/chunk-optimization/dist/webpack-5/73.js b/examples/chunk-optimization/dist/webpack-5/73.js new file mode 100644 index 00000000..5e01f279 --- /dev/null +++ b/examples/chunk-optimization/dist/webpack-5/73.js @@ -0,0 +1,40 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[73],{ + +/***/ 173: +/***/ ((module, exports, __webpack_require__) => { + +exports = module.exports = __webpack_require__(609)(false); +// Module +exports.push([module.id, "body {\n background: snow;\n}", ""]); + + + +/***/ }), + +/***/ 73: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + +var content = __webpack_require__(173); + +if(typeof content === 'string') content = [[module.id, content, '']]; + +var transform; +var insertInto; + + + +var options = {"hmr":true} + +options.transform = transform +options.insertInto = undefined; + +var update = __webpack_require__(379)(content, options); + +if(content.locals) module.exports = content.locals; + +if(false) {} + +/***/ }) + +}]); \ No newline at end of file diff --git a/examples/chunk-optimization/dist/webpack-5/805.js b/examples/chunk-optimization/dist/webpack-5/805.js new file mode 100644 index 00000000..66796e1b --- /dev/null +++ b/examples/chunk-optimization/dist/webpack-5/805.js @@ -0,0 +1,596 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[805],{ + +/***/ 609: +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +// css base code, injected by the css-loader +module.exports = function (useSourceMap) { + var list = []; // return the list of modules as css string + + list.toString = function toString() { + return this.map(function (item) { + var content = cssWithMappingToString(item, useSourceMap); + + if (item[2]) { + return '@media ' + item[2] + '{' + content + '}'; + } else { + return content; + } + }).join(''); + }; // import a list of modules into the list + + + list.i = function (modules, mediaQuery) { + if (typeof modules === 'string') { + modules = [[null, modules, '']]; + } + + var alreadyImportedModules = {}; + + for (var i = 0; i < this.length; i++) { + var id = this[i][0]; + + if (id != null) { + alreadyImportedModules[id] = true; + } + } + + for (i = 0; i < modules.length; i++) { + var item = modules[i]; // skip already imported module + // this implementation is not 100% perfect for weird media query combinations + // when a module is imported multiple times with different media queries. + // I hope this will never occur (Hey this way we have smaller bundles) + + if (item[0] == null || !alreadyImportedModules[item[0]]) { + if (mediaQuery && !item[2]) { + item[2] = mediaQuery; + } else if (mediaQuery) { + item[2] = '(' + item[2] + ') and (' + mediaQuery + ')'; + } + + list.push(item); + } + } + }; + + return list; +}; + +function cssWithMappingToString(item, useSourceMap) { + var content = item[1] || ''; + var cssMapping = item[3]; + + if (!cssMapping) { + return content; + } + + if (useSourceMap && typeof btoa === 'function') { + var sourceMapping = toComment(cssMapping); + var sourceURLs = cssMapping.sources.map(function (source) { + return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'; + }); + return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); + } + + return [content].join('\n'); +} // Adapted from convert-source-map (MIT) + + +function toComment(sourceMap) { + // eslint-disable-next-line no-undef + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); + var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; + return '/*# ' + data + ' */'; +} + +/***/ }), + +/***/ 379: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +var stylesInDom = {}; + +var memoize = function (fn) { + var memo; + + return function () { + if (typeof memo === "undefined") memo = fn.apply(this, arguments); + return memo; + }; +}; + +var isOldIE = memoize(function () { + // Test for IE <= 9 as proposed by Browserhacks + // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 + // Tests for existence of standard globals is to allow style-loader + // to operate correctly into non-standard environments + // @see https://github.com/webpack-contrib/style-loader/issues/177 + return window && document && document.all && !window.atob; +}); + +var getTarget = function (target, parent) { + if (parent){ + return parent.querySelector(target); + } + return document.querySelector(target); +}; + +var getElement = (function (fn) { + var memo = {}; + + return function(target, parent) { + // If passing function in options, then use it for resolve "head" element. + // Useful for Shadow Root style i.e + // { + // insertInto: function () { return document.querySelector("#foo").shadowRoot } + // } + if (typeof target === 'function') { + return target(); + } + if (typeof memo[target] === "undefined") { + var styleTarget = getTarget.call(this, target, parent); + // Special case to return head of iframe instead of iframe itself + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch(e) { + styleTarget = null; + } + } + memo[target] = styleTarget; + } + return memo[target] + }; +})(); + +var singleton = null; +var singletonCounter = 0; +var stylesInsertedAtTop = []; + +var fixUrls = __webpack_require__(657); + +module.exports = function(list, options) { + if (typeof DEBUG !== "undefined" && DEBUG) { + if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); + } + + options = options || {}; + + options.attrs = typeof options.attrs === "object" ? options.attrs : {}; + + // Force single-tag solution on IE6-9, which has a hard limit on the # of \ No newline at end of file diff --git a/examples/inline/dist/webpack-5/styles.css b/examples/inline/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/inline/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/javascript-advanced/dist/webpack-5/0714810ae3fb211173e2964249507195.png b/examples/javascript-advanced/dist/webpack-5/0714810ae3fb211173e2964249507195.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b3d789f45d8f124a1fde57a36e55855a6dcb5 GIT binary patch literal 54055 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 Duf!qe literal 0 HcmV?d00001 diff --git a/examples/javascript-advanced/dist/webpack-5/bundle.js b/examples/javascript-advanced/dist/webpack-5/bundle.js new file mode 100644 index 00000000..3e1c0ed3 --- /dev/null +++ b/examples/javascript-advanced/dist/webpack-5/bundle.js @@ -0,0 +1,59 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is not neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 184: +/***/ ((module) => { + +"use strict"; +eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?"); + +/***/ }), + +/***/ 636: +/***/ (() => { + +eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./main.css?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /************************************************************************/ +(() => { +eval("__webpack_require__(636);\n\nvar universal = __webpack_require__(184);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?"); +})(); + +/******/ })() +; \ No newline at end of file diff --git a/examples/javascript-advanced/dist/webpack-5/index.html b/examples/javascript-advanced/dist/webpack-5/index.html new file mode 100644 index 00000000..2ec60f39 --- /dev/null +++ b/examples/javascript-advanced/dist/webpack-5/index.html @@ -0,0 +1 @@ +Webpack AppHello World from backend -

Partial

\ No newline at end of file diff --git a/examples/javascript-advanced/dist/webpack-5/styles.css b/examples/javascript-advanced/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/javascript-advanced/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/javascript/dist/webpack-5/0714810ae3fb211173e2964249507195.png b/examples/javascript/dist/webpack-5/0714810ae3fb211173e2964249507195.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b3d789f45d8f124a1fde57a36e55855a6dcb5 GIT binary patch literal 54055 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 Duf!qe literal 0 HcmV?d00001 diff --git a/examples/javascript/dist/webpack-5/bundle.js b/examples/javascript/dist/webpack-5/bundle.js new file mode 100644 index 00000000..3e1c0ed3 --- /dev/null +++ b/examples/javascript/dist/webpack-5/bundle.js @@ -0,0 +1,59 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is not neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 184: +/***/ ((module) => { + +"use strict"; +eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?"); + +/***/ }), + +/***/ 636: +/***/ (() => { + +eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./main.css?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /************************************************************************/ +(() => { +eval("__webpack_require__(636);\n\nvar universal = __webpack_require__(184);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?"); +})(); + +/******/ })() +; \ No newline at end of file diff --git a/examples/javascript/dist/webpack-5/index.html b/examples/javascript/dist/webpack-5/index.html new file mode 100644 index 00000000..62334917 --- /dev/null +++ b/examples/javascript/dist/webpack-5/index.html @@ -0,0 +1 @@ +Hello World from backend2020-03-30T16:36:46.399Z

Partial

\ No newline at end of file diff --git a/examples/javascript/dist/webpack-5/styles.css b/examples/javascript/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/javascript/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/pug-loader/dist/webpack-5/bundle.js b/examples/pug-loader/dist/webpack-5/bundle.js new file mode 100644 index 00000000..11ae57a6 --- /dev/null +++ b/examples/pug-loader/dist/webpack-5/bundle.js @@ -0,0 +1,333 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 636: +/***/ (() => { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ 656: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var pug = __webpack_require__(79); + +function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (time) {pug_html = pug_html + "\u003C!-- this partial is used for frontend and backend--\u003E\u003Cdiv class=\"time\"\u003E \u003Cb\u003ECurrent time\u003C\u002Fb\u003E\u003Cp\u003E" + (pug.escape(null == (pug_interp = time.toISOString()) ? "" : pug_interp)) + "\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cimg src=\"#{require('.\u002Flogo.png')}\"\u003E";}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return pug_html;}; +module.exports = template; + +/***/ }), + +/***/ 79: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var pug_has_own_property = Object.prototype.hasOwnProperty; + +/** + * Merge two attribute objects giving precedence + * to values in object `b`. Classes are special-cased + * allowing for arrays and merging/joining appropriately + * resulting in a string. + * + * @param {Object} a + * @param {Object} b + * @return {Object} a + * @api private + */ + +exports.merge = pug_merge; +function pug_merge(a, b) { + if (arguments.length === 1) { + var attrs = a[0]; + for (var i = 1; i < a.length; i++) { + attrs = pug_merge(attrs, a[i]); + } + return attrs; + } + + for (var key in b) { + if (key === 'class') { + var valA = a[key] || []; + a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []); + } else if (key === 'style') { + var valA = pug_style(a[key]); + valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA; + var valB = pug_style(b[key]); + valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB; + a[key] = valA + valB; + } else { + a[key] = b[key]; + } + } + + return a; +}; + +/** + * Process array, object, or string as a string of classes delimited by a space. + * + * If `val` is an array, all members of it and its subarrays are counted as + * classes. If `escaping` is an array, then whether or not the item in `val` is + * escaped depends on the corresponding item in `escaping`. If `escaping` is + * not an array, no escaping is done. + * + * If `val` is an object, all the keys whose value is truthy are counted as + * classes. No escaping is done. + * + * If `val` is a string, it is counted as a class. No escaping is done. + * + * @param {(Array.|Object.|string)} val + * @param {?Array.} escaping + * @return {String} + */ +exports.classes = pug_classes; +function pug_classes_array(val, escaping) { + var classString = '', className, padding = '', escapeEnabled = Array.isArray(escaping); + for (var i = 0; i < val.length; i++) { + className = pug_classes(val[i]); + if (!className) continue; + escapeEnabled && escaping[i] && (className = pug_escape(className)); + classString = classString + padding + className; + padding = ' '; + } + return classString; +} +function pug_classes_object(val) { + var classString = '', padding = ''; + for (var key in val) { + if (key && val[key] && pug_has_own_property.call(val, key)) { + classString = classString + padding + key; + padding = ' '; + } + } + return classString; +} +function pug_classes(val, escaping) { + if (Array.isArray(val)) { + return pug_classes_array(val, escaping); + } else if (val && typeof val === 'object') { + return pug_classes_object(val); + } else { + return val || ''; + } +} + +/** + * Convert object or string to a string of CSS styles delimited by a semicolon. + * + * @param {(Object.|string)} val + * @return {String} + */ + +exports.style = pug_style; +function pug_style(val) { + if (!val) return ''; + if (typeof val === 'object') { + var out = ''; + for (var style in val) { + /* istanbul ignore else */ + if (pug_has_own_property.call(val, style)) { + out = out + style + ':' + val[style] + ';'; + } + } + return out; + } else { + return val + ''; + } +}; + +/** + * Render the given attribute. + * + * @param {String} key + * @param {String} val + * @param {Boolean} escaped + * @param {Boolean} terse + * @return {String} + */ +exports.attr = pug_attr; +function pug_attr(key, val, escaped, terse) { + if (val === false || val == null || !val && (key === 'class' || key === 'style')) { + return ''; + } + if (val === true) { + return ' ' + (terse ? key : key + '="' + key + '"'); + } + var type = typeof val; + if ((type === 'object' || type === 'function') && typeof val.toJSON === 'function') { + val = val.toJSON(); + } + if (typeof val !== 'string') { + val = JSON.stringify(val); + if (!escaped && val.indexOf('"') !== -1) { + return ' ' + key + '=\'' + val.replace(/'/g, ''') + '\''; + } + } + if (escaped) val = pug_escape(val); + return ' ' + key + '="' + val + '"'; +}; + +/** + * Render the given attributes object. + * + * @param {Object} obj + * @param {Object} terse whether to use HTML5 terse boolean attributes + * @return {String} + */ +exports.attrs = pug_attrs; +function pug_attrs(obj, terse){ + var attrs = ''; + + for (var key in obj) { + if (pug_has_own_property.call(obj, key)) { + var val = obj[key]; + + if ('class' === key) { + val = pug_classes(val); + attrs = pug_attr(key, val, false, terse) + attrs; + continue; + } + if ('style' === key) { + val = pug_style(val); + } + attrs += pug_attr(key, val, false, terse); + } + } + + return attrs; +}; + +/** + * Escape the given string of `html`. + * + * @param {String} html + * @return {String} + * @api private + */ + +var pug_match_html = /["&<>]/; +exports.escape = pug_escape; +function pug_escape(_html){ + var html = '' + _html; + var regexResult = pug_match_html.exec(html); + if (!regexResult) return _html; + + var result = ''; + var i, lastIndex, escape; + for (i = regexResult.index, lastIndex = 0; i < html.length; i++) { + switch (html.charCodeAt(i)) { + case 34: escape = '"'; break; + case 38: escape = '&'; break; + case 60: escape = '<'; break; + case 62: escape = '>'; break; + default: continue; + } + if (lastIndex !== i) result += html.substring(lastIndex, i); + lastIndex = i + 1; + result += escape; + } + if (lastIndex !== i) return result + html.substring(lastIndex, i); + else return result; +}; + +/** + * Re-throw the given `err` in context to the + * the pug in `filename` at the given `lineno`. + * + * @param {Error} err + * @param {String} filename + * @param {String} lineno + * @param {String} str original source + * @api private + */ + +exports.rethrow = pug_rethrow; +function pug_rethrow(err, filename, lineno, str){ + if (!(err instanceof Error)) throw err; + if ((typeof window != 'undefined' || !filename) && !str) { + err.message += ' on line ' + lineno; + throw err; + } + try { + str = str || __webpack_require__(993).readFileSync(filename, 'utf8') + } catch (ex) { + pug_rethrow(err, null, lineno) + } + var context = 3 + , lines = str.split('\n') + , start = Math.max(lineno - context, 0) + , end = Math.min(lines.length, lineno + context); + + // Error context + var context = lines.slice(start, end).map(function(line, i){ + var curr = i + start + 1; + return (curr == lineno ? ' > ' : ' ') + + curr + + '| ' + + line; + }).join('\n'); + + // Alter exception message + err.path = filename; + err.message = (filename || 'Pug') + ':' + lineno + + '\n' + context + '\n\n' + err.message; + throw err; +}; + + +/***/ }), + +/***/ 993: +/***/ (() => { + +/* (ignored) */ + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /************************************************************************/ +(() => { +"use strict"; + +__webpack_require__(636); +// Use the same template for the frontend code +var template = __webpack_require__(656); + +setInterval(function () { + var div = document.getElementById('main'); + div.innerHTML = template({ time: new Date() }); + div.style.color = 'navy'; +}, 1000); + +})(); + +/******/ })() +; \ No newline at end of file diff --git a/examples/pug-loader/dist/webpack-5/favicon.ico b/examples/pug-loader/dist/webpack-5/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be74abd69ad6a32de7375df13cab9354798e328f GIT binary patch literal 766 zcmc(dze~eV5XUd2fg&jH87YDYDQKxq1{4b-_ydP-wqS9vgGh17QXQQAwOE{VaBvi* zmu^z9t({y-&1ey8Y_x;?x+`BviV9;aRjMgZ8M*!jgkRrFqSI9;F zHyfX@Az|AvVmn~YWWZP`0&JWEY~BFm?*Vq}VD7&_%x%MP$p`D`4JMC!K|B7pt?Mmp zUJAB7rxMXS6=!P+AtLU9V)J#61WPxwipRXCHO{BJ`l{m53#=t97a!znv~vfmr|AaP zRGIT7#0FyJy3Z*hL{GQp-0TRhX8UzZ)+>%?mK0^goaX4Q;xpug demo
Current time

1998-12-31T23:00:00.000Z

\ No newline at end of file diff --git a/examples/pug-loader/dist/webpack-5/styles.css b/examples/pug-loader/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/pug-loader/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/sort-manually/dist/webpack-5/0714810ae3fb211173e2964249507195.png b/examples/sort-manually/dist/webpack-5/0714810ae3fb211173e2964249507195.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b3d789f45d8f124a1fde57a36e55855a6dcb5 GIT binary patch literal 54055 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 Duf!qe literal 0 HcmV?d00001 diff --git a/examples/sort-manually/dist/webpack-5/a.js b/examples/sort-manually/dist/webpack-5/a.js new file mode 100644 index 00000000..dbfd0573 --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/a.js @@ -0,0 +1,47 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 636: +/***/ (() => { + +// extracted by mini-css-extract-plugin + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /************************************************************************/ +(() => { +__webpack_require__(636); +var h1 = document.createElement('h1'); +h1.innerHTML = 'a!'; +document.body.appendChild(h1); + +})(); + +/******/ })() +; \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/b.js b/examples/sort-manually/dist/webpack-5/b.js new file mode 100644 index 00000000..7bf528af --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/b.js @@ -0,0 +1,8 @@ +/******/ (() => { // webpackBootstrap +/******/ /************************************************************************/ +var h1 = document.createElement('h1'); +h1.innerHTML = 'b!'; +document.body.appendChild(h1); + +/******/ })() +; \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/c.js b/examples/sort-manually/dist/webpack-5/c.js new file mode 100644 index 00000000..82852a6f --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/c.js @@ -0,0 +1,8 @@ +/******/ (() => { // webpackBootstrap +/******/ /************************************************************************/ +var h1 = document.createElement('h1'); +h1.innerHTML = 'c!'; +document.body.appendChild(h1); + +/******/ })() +; \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/d.js b/examples/sort-manually/dist/webpack-5/d.js new file mode 100644 index 00000000..cfd11c66 --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/d.js @@ -0,0 +1,8 @@ +/******/ (() => { // webpackBootstrap +/******/ /************************************************************************/ +var h1 = document.createElement('h1'); +h1.innerHTML = 'd!'; +document.body.appendChild(h1); + +/******/ })() +; \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/e.js b/examples/sort-manually/dist/webpack-5/e.js new file mode 100644 index 00000000..01886f02 --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/e.js @@ -0,0 +1,8 @@ +/******/ (() => { // webpackBootstrap +/******/ /************************************************************************/ +var h1 = document.createElement('h1'); +h1.innerHTML = 'e!'; +document.body.appendChild(h1); + +/******/ })() +; \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/first-file.html b/examples/sort-manually/dist/webpack-5/first-file.html new file mode 100644 index 00000000..f251a0f8 --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/first-file.html @@ -0,0 +1 @@ +Example template \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/second-file.html b/examples/sort-manually/dist/webpack-5/second-file.html new file mode 100644 index 00000000..ba8f8673 --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/second-file.html @@ -0,0 +1 @@ +Example template \ No newline at end of file diff --git a/examples/sort-manually/dist/webpack-5/styles.css b/examples/sort-manually/dist/webpack-5/styles.css new file mode 100644 index 00000000..e86486ba --- /dev/null +++ b/examples/sort-manually/dist/webpack-5/styles.css @@ -0,0 +1,3 @@ +body { + background: snow; +} diff --git a/examples/template-parameters/dist/webpack-5/bundle.js b/examples/template-parameters/dist/webpack-5/bundle.js new file mode 100644 index 00000000..a81d487b --- /dev/null +++ b/examples/template-parameters/dist/webpack-5/bundle.js @@ -0,0 +1,7 @@ +/******/ (() => { // webpackBootstrap +var h1 = document.createElement('h1'); +h1.innerHTML = 'Hello world!'; +document.body.appendChild(h1); + +/******/ })() +; \ No newline at end of file diff --git a/examples/template-parameters/dist/webpack-5/index.html b/examples/template-parameters/dist/webpack-5/index.html new file mode 100644 index 00000000..2ac7ecd2 --- /dev/null +++ b/examples/template-parameters/dist/webpack-5/index.html @@ -0,0 +1 @@ +bar \ No newline at end of file diff --git a/index.js b/index.js index 7758eeb6..ed6961b5 100644 --- a/index.js +++ b/index.js @@ -16,10 +16,10 @@ const fs = require('fs'); const _ = require('lodash'); const path = require('path'); const loaderUtils = require('loader-utils'); +const { CachedChildCompilation } = require('./lib/cached-child-compiler'); const { createHtmlTagObject, htmlTagObjectToString } = require('./lib/html-tags'); -const childCompiler = require('./lib/compiler.js'); const prettyError = require('./lib/errors.js'); const chunkSorter = require('./lib/chunksorter.js'); const getHtmlWebpackPluginHooks = require('./lib/hooks.js').getHtmlWebpackPluginHooks; @@ -74,10 +74,6 @@ class HtmlWebpackPlugin { // Instance variables to keep caching information // for multiple builds this.childCompilerHash = undefined; - /** - * @type {string | undefined} - */ - this.childCompilationOutputName = undefined; this.assetJson = undefined; this.hash = undefined; this.version = HtmlWebpackPlugin.version; @@ -89,12 +85,15 @@ class HtmlWebpackPlugin { */ apply (compiler) { const self = this; - let isCompilationCached = false; - /** @type Promise */ - let compilationPromise; this.options.template = this.getFullTemplatePath(this.options.template, compiler.context); + // Inject child compiler plugin + const childCompilerPlugin = new CachedChildCompilation(compiler); + if (!this.options.templateContent) { + childCompilerPlugin.addEntry(this.options.template); + } + // convert absolute filename into relative so that webpack can // generate it at correct location const filename = this.options.filename; @@ -128,75 +127,42 @@ class HtmlWebpackPlugin { }; } - // Clear the cache once a new HtmlWebpackPlugin is added - childCompiler.clearCache(compiler); - - // Register all HtmlWebpackPlugins instances at the child compiler - compiler.hooks.thisCompilation.tap('HtmlWebpackPlugin', (compilation) => { - // Clear the cache if the child compiler is outdated - if (childCompiler.hasOutDatedTemplateCache(compilation)) { - childCompiler.clearCache(compiler); - } - // Add this instances template to the child compiler - childCompiler.addTemplateToCompiler(compiler, this.options.template); - // Add file dependencies of child compiler to parent compiler - // to keep them watched even if we get the result from the cache - compilation.hooks.additionalChunkAssets.tap('HtmlWebpackPlugin', () => { - const childCompilerDependencies = childCompiler.getFileDependencies(compiler); - childCompilerDependencies.forEach(fileDependency => { - compilation.compilationDependencies.add(fileDependency); - }); - }); - }); - - compiler.hooks.make.tapAsync('HtmlWebpackPlugin', (compilation, callback) => { - // Compile the template (queued) - compilationPromise = childCompiler.compileTemplate(self.options.template, self.options.filename, compilation) - .catch(err => { - compilation.errors.push(prettyError(err, compiler.context).toString()); - return { - content: self.options.showErrors ? prettyError(err, compiler.context).toJsonHtml() : 'ERROR', - outputName: self.options.filename, - hash: '' - }; - }) - .then(compilationResult => { - // If the compilation change didnt change the cache is valid - isCompilationCached = Boolean(compilationResult.hash) && self.childCompilerHash === compilationResult.hash; - self.childCompilerHash = compilationResult.hash; - self.childCompilationOutputName = compilationResult.outputName; - callback(); - return compilationResult.content; - }); - }); - compiler.hooks.emit.tapAsync('HtmlWebpackPlugin', /** * Hook into the webpack emit phase * @param {WebpackCompilation} compilation - * @param {() => void} callback + * @param {(err?: Error) => void} callback */ (compilation, callback) => { // Get all entry point names for this html file const entryNames = Array.from(compilation.entrypoints.keys()); const filteredEntryNames = self.filterChunks(entryNames, self.options.chunks, self.options.excludeChunks); const sortedEntryNames = self.sortEntryChunks(filteredEntryNames, this.options.chunksSortMode, compilation); - const childCompilationOutputName = self.childCompilationOutputName; - if (childCompilationOutputName === undefined) { - throw new Error('Did not receive child compilation result'); + const templateResult = this.options.templateContent + ? { mainCompilationHash: compilation.hash } + : childCompilerPlugin.getCompilationEntryResult(this.options.template); + + this.childCompilerHash = templateResult.mainCompilationHash; + + if ('error' in templateResult) { + compilation.errors.push(prettyError(templateResult.error, compiler.context).toString()); } + const childCompilationOutputName = compilation.mainTemplate.getAssetPath(this.options.filename, 'compiledEntry' in templateResult ? { + hash: templateResult.compiledEntry.hash, + chunk: templateResult.compiledEntry.entry + } : { + hash: templateResult.mainCompilationHash + }); + + // If the child compilation was not executed during a previous main compile run + // it is a cached result + const isCompilationCached = templateResult.mainCompilationHash !== compilation.hash; + // Turn the entry point names into file paths const assets = self.htmlWebpackPluginAssets(compilation, childCompilationOutputName, sortedEntryNames); - // If this is a hot update compilation, move on! - // This solves a problem where an `index.html` file is generated for hot-update js files - // It only happens in Webpack 2, where hot updates are emitted separately before the full bundle - if (self.isHotUpdateCompilation(assets)) { - return callback(); - } - // If the template and the assets did not change we don't have to emit the html const assetJson = JSON.stringify(self.getAssetFiles(assets)); if (isCompilationCached && self.options.cache && assetJson === self.assetJson) { @@ -249,15 +215,20 @@ class HtmlWebpackPlugin { }); // Turn the compiled tempalte into a nodejs function or into a nodejs string - const templateEvaluationPromise = compilationPromise - .then(compiledTemplate => { + const templateEvaluationPromise = Promise.resolve() + .then(() => { + if ('error' in templateResult) { + return self.options.showErrors ? prettyError(templateResult.error, compiler.context).toHtml() : 'ERROR'; + } // Allow to use a custom function / string instead if (self.options.templateContent !== false) { return self.options.templateContent; } // Once everything is compiled evaluate the html factory // and replace it with its content - return self.evaluateCompilationResult(compilation, compiledTemplate); + return ('compiledEntry' in templateResult) + ? self.evaluateCompilationResult(compilation, templateResult.compiledEntry.content) + : Promise.reject(new Error('Child compilation contained no compiledEntry')); }); const templateExectutionPromise = Promise.all([assetsPromise, assetTagGroupsPromise, templateEvaluationPromise]) diff --git a/lib/cached-child-compiler.js b/lib/cached-child-compiler.js new file mode 100644 index 00000000..e7444005 --- /dev/null +++ b/lib/cached-child-compiler.js @@ -0,0 +1,379 @@ +// @ts-check +/** + * @file + * Helper plugin manages the cached state of the child compilation + * + * To optimize performance the child compilation is running asyncronously. + * Therefore it needs to be started in the compiler.make phase and ends after + * the compilation.afterCompile phase. + * + * To prevent bugs from blocked hooks there is no promise or event based api + * for this plugin. + * + * Example usage: + * + * ```js + const childCompilerPlugin = new PersistentChildCompilerPlugin(); + childCompilerPlugin.addEntry('./src/index.js'); + compiler.hooks.afterCompile.tapAsync('MyPlugin', (compilation, callback) => { + console.log(childCompilerPlugin.getCompilationResult()['./src/index.js'])); + return true; + }); + * ``` + */ + +// Import types +/** @typedef {import("webpack/lib/Compiler.js")} WebpackCompiler */ +/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ +/** @typedef {{hash: string, entry: any, content: string }} ChildCompilationResultEntry */ +/** @typedef {import("./webpack4/file-watcher-api").Snapshot} Snapshot */ +/** @typedef {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} FileDependencies */ +/** @typedef {{ + dependencies: FileDependencies, + compiledEntries: {[entryName: string]: ChildCompilationResultEntry} +} | { + dependencies: FileDependencies, + error: Error +}} ChildCompilationResult */ +'use strict'; + +const { HtmlWebpackChildCompiler } = require('./child-compiler'); +const fileWatcherApi = require('./file-watcher-api'); + +/** + * This plugin is a singleton for performance reasons. + * To keep track if a plugin does already exist for the compiler they are cached + * in this map + * @type {WeakMap}} + */ +const compilerMap = new WeakMap(); + +class CachedChildCompilation { + /** + * @param {WebpackCompiler} compiler + */ + constructor (compiler) { + /** + * @private + * @type {WebpackCompiler} + */ + this.compiler = compiler; + // Create a singlton instance for the compiler + // if there is none + if (compilerMap.has(compiler)) { + return; + } + const persistentChildCompilerSingletonPlugin = new PersistentChildCompilerSingletonPlugin(); + compilerMap.set(compiler, persistentChildCompilerSingletonPlugin); + persistentChildCompilerSingletonPlugin.apply(compiler); + } + + /** + * apply is called by the webpack main compiler during the start phase + * @param {string} entry + */ + addEntry (entry) { + const persistentChildCompilerSingletonPlugin = compilerMap.get(this.compiler); + if (!persistentChildCompilerSingletonPlugin) { + throw new Error( + 'PersistentChildCompilerSingletonPlugin instance not found.' + ); + } + persistentChildCompilerSingletonPlugin.addEntry(entry); + } + + getCompilationResult () { + const persistentChildCompilerSingletonPlugin = compilerMap.get(this.compiler); + if (!persistentChildCompilerSingletonPlugin) { + throw new Error( + 'PersistentChildCompilerSingletonPlugin instance not found.' + ); + } + return persistentChildCompilerSingletonPlugin.getLatestResult(); + } + + /** + * Returns the result for the given entry + * @param {string} entry + * @returns { + | { mainCompilationHash: string, error: Error } + | { mainCompilationHash: string, compiledEntry: ChildCompilationResultEntry } + } + */ + getCompilationEntryResult (entry) { + const latestResult = this.getCompilationResult(); + const compilationResult = latestResult.compilationResult; + return 'error' in compilationResult ? { + mainCompilationHash: latestResult.mainCompilationHash, + error: compilationResult.error + } : { + mainCompilationHash: latestResult.mainCompilationHash, + compiledEntry: compilationResult.compiledEntries[entry] + }; + } +} + +class PersistentChildCompilerSingletonPlugin { + constructor () { + /** + * @private + * @type { + | { + isCompiling: false, + isVerifyingCache: false, + entries: string[], + compiledEntries: string[], + mainCompilationHash: string, + compilationResult: ChildCompilationResult + } + | Readonly<{ + isCompiling: false, + isVerifyingCache: true, + entries: string[], + previousEntries: string[], + previousResult: ChildCompilationResult + }> + | Readonly <{ + isVerifyingCache: false, + isCompiling: true, + entries: string[], + }> + } the internal compilation state */ + this.compilationState = { + isCompiling: false, + isVerifyingCache: false, + entries: [], + compiledEntries: [], + mainCompilationHash: 'initial', + compilationResult: { + dependencies: { + fileDependencies: [], + contextDependencies: [], + missingDependencies: [] + }, + compiledEntries: {} + } + }; + } + + /** + * apply is called by the webpack main compiler during the start phase + * @param {WebpackCompiler} compiler + */ + apply (compiler) { + /** @type Promise */ + let childCompilationResultPromise = Promise.resolve({ + dependencies: { + fileDependencies: [], + contextDependencies: [], + missingDependencies: [] + }, + compiledEntries: {} + }); + /** + * The main compilation hash which will only be updated + * if the childCompiler changes + */ + let mainCompilationHashOfLastChildRecompile = ''; + /** @typedef{Snapshot|undefined} */ + let previousFileSystemSnapshot; + let compilationStartTime = new Date().getTime(); + + compiler.hooks.make.tapAsync( + 'PersistentChildCompilerSingletonPlugin', + (mainCompilation, callback) => { + if (this.compilationState.isCompiling || this.compilationState.isVerifyingCache) { + return callback(new Error('Child compilation has already started')); + } + + // Update the time to the current compile start time + compilationStartTime = new Date().getTime(); + + // The compilation starts - adding new templates is now not possible anymore + this.compilationState = { + isCompiling: false, + isVerifyingCache: true, + previousEntries: this.compilationState.compiledEntries, + previousResult: this.compilationState.compilationResult, + entries: this.compilationState.entries + }; + + // Validate cache: + const isCacheValidPromise = this.isCacheValid(previousFileSystemSnapshot, mainCompilation); + + let cachedResult = childCompilationResultPromise; + childCompilationResultPromise = isCacheValidPromise.then((isCacheValid) => { + // Reuse cache + if (isCacheValid) { + return cachedResult; + } + // Start the compilation + const compiledEntriesPromise = this.compileEntries( + mainCompilation, + this.compilationState.entries + ); + // Update snapshot as soon as we know the filedependencies + // this might possibly cause bugs if files were changed inbetween + // compilation start and snapshot creation + compiledEntriesPromise.then((childCompilationResult) => { + return fileWatcherApi.createSnapshot(childCompilationResult.dependencies, mainCompilation, compilationStartTime); + }).then((snapshot) => { + previousFileSystemSnapshot = snapshot; + }); + return compiledEntriesPromise; + }); + + // Add files to compilation which needs to be watched: + mainCompilation.hooks.optimizeTree.tapAsync( + 'PersistentChildCompilerSingletonPlugin', + (chunks, modules, callback) => { + const handleCompilationDonePromise = childCompilationResultPromise.then( + childCompilationResult => { + this.watchFiles( + mainCompilation, + childCompilationResult.dependencies + ); + }); + handleCompilationDonePromise.then(() => callback(null, chunks, modules), callback); + } + ); + + // Store the final compilation once the main compilation hash is known + mainCompilation.hooks.additionalAssets.tapAsync( + 'PersistentChildCompilerSingletonPlugin', + (callback) => { + const didRecompilePromise = Promise.all([childCompilationResultPromise, cachedResult]).then( + ([childCompilationResult, cachedResult]) => { + // Update if childCompilation changed + return (cachedResult !== childCompilationResult); + } + ); + + const handleCompilationDonePromise = Promise.all([childCompilationResultPromise, didRecompilePromise]).then( + ([childCompilationResult, didRecompile]) => { + // Update hash and snapshot if childCompilation changed + if (didRecompile) { + mainCompilationHashOfLastChildRecompile = mainCompilation.hash; + } + this.compilationState = { + isCompiling: false, + isVerifyingCache: false, + entries: this.compilationState.entries, + compiledEntries: this.compilationState.entries, + compilationResult: childCompilationResult, + mainCompilationHash: mainCompilationHashOfLastChildRecompile + }; + }); + handleCompilationDonePromise.then(() => callback(null), callback); + } + ); + + // Continue compilation: + callback(null); + } + ); + } + + /** + * Add a new entry to the next compile run + * @param {string} entry + */ + addEntry (entry) { + if (this.compilationState.isCompiling || this.compilationState.isVerifyingCache) { + throw new Error( + 'The child compiler has already started to compile. ' + + "Please add entries before the main compiler 'make' phase has started or " + + 'after the compilation is done.' + ); + } + if (this.compilationState.entries.indexOf(entry) === -1) { + this.compilationState.entries = [...this.compilationState.entries, entry]; + } + } + + getLatestResult () { + if (this.compilationState.isCompiling || this.compilationState.isVerifyingCache) { + throw new Error( + 'The child compiler is not done compiling. ' + + "Please access the result after the compiler 'make' phase has started or " + + 'after the compilation is done.' + ); + } + return { + mainCompilationHash: this.compilationState.mainCompilationHash, + compilationResult: this.compilationState.compilationResult + }; + } + + /** + * Verify that the cache is still valid + * @private + * @param {Snapshot | undefined} snapshot + * @param {WebpackCompilation} mainCompilation + * @returns {Promise} + */ + isCacheValid (snapshot, mainCompilation) { + if (!this.compilationState.isVerifyingCache) { + return Promise.reject(new Error('Cache validation can only be done right before the compilation starts')); + } + // If there are no entries we don't need a new child compilation + if (this.compilationState.entries.length === 0) { + return Promise.resolve(true); + } + // If there are new entries the cache is invalid + if (this.compilationState.entries !== this.compilationState.previousEntries) { + return Promise.resolve(false); + } + // Mark the cache as invalid if there is no snapshot + if (!snapshot) { + return Promise.resolve(false); + } + return fileWatcherApi.isSnapShotValid(snapshot, mainCompilation); + } + + /** + * Start to compile all templates + * + * @private + * @param {WebpackCompilation} mainCompilation + * @param {string[]} entries + * @returns {Promise} + */ + compileEntries (mainCompilation, entries) { + const compiler = new HtmlWebpackChildCompiler(entries); + return compiler.compileTemplates(mainCompilation).then((result) => { + return { + // The compiled sources to render the content + compiledEntries: result, + // The file dependencies to find out if a + // recompilation is required + dependencies: compiler.fileDependencies, + // The main compilation hash can be used to find out + // if this compilation was done during the current compilation + mainCompilationHash: mainCompilation.hash + }; + }, error => ({ + // The compiled sources to render the content + error, + // The file dependencies to find out if a + // recompilation is required + dependencies: compiler.fileDependencies, + // The main compilation hash can be used to find out + // if this compilation was done during the current compilation + mainCompilationHash: mainCompilation.hash + })); + } + + /** + * @private + * @param {WebpackCompilation} mainCompilation + * @param {FileDependencies} files + */ + watchFiles (mainCompilation, files) { + fileWatcherApi.watchFiles(mainCompilation, files); + } +} + +module.exports = { + CachedChildCompilation +}; diff --git a/lib/child-compiler.js b/lib/child-compiler.js new file mode 100644 index 00000000..8dd4ab44 --- /dev/null +++ b/lib/child-compiler.js @@ -0,0 +1,183 @@ +// @ts-check +/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ +/** @typedef {import("webpack/lib/Compiler.js")} WebpackCompiler */ +/** @typedef {import("webpack/lib/Chunk.js")} WebpackChunk */ +'use strict'; +/** + * @file + * This file uses webpack to compile a template with a child compiler. + * + * [TEMPLATE] -> [JAVASCRIPT] + * + */ +'use strict'; +const NodeTemplatePlugin = require('webpack/lib/node/NodeTemplatePlugin'); +const NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin'); +const LoaderTargetPlugin = require('webpack/lib/LoaderTargetPlugin'); +const LibraryTemplatePlugin = require('webpack/lib/LibraryTemplatePlugin'); +const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); + +/** + * The HtmlWebpackChildCompiler is a helper to allow resusing one childCompiler + * for multile HtmlWebpackPlugin instances to improve the compilation performance. + */ +class HtmlWebpackChildCompiler { + /** + * + * @param {string[]} templates + */ + constructor (templates) { + /** + * @type {string[]} templateIds + * The template array will allow us to keep track which input generated which output + */ + this.templates = templates; + /** + * @type {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>} + */ + this.compilationPromise; // eslint-disable-line + /** + * @type {number} + */ + this.compilationStartedTimestamp; // eslint-disable-line + /** + * @type {number} + */ + this.compilationEndedTimestamp; // eslint-disable-line + /** + * All file dependencies of the child compiler + * @type {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} + */ + this.fileDependencies = { fileDependencies: [], contextDependencies: [], missingDependencies: [] }; + } + + /** + * Returns true if the childCompiler is currently compiling + * @retuns {boolean} + */ + isCompiling () { + return !this.didCompile() && this.compilationStartedTimestamp !== undefined; + } + + /** + * Returns true if the childCOmpiler is done compiling + */ + didCompile () { + return this.compilationEndedTimestamp !== undefined; + } + + /** + * This function will start the template compilation + * once it is started no more templates can be added + * + * @param {WebpackCompilation} mainCompilation + * @returns {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>} + */ + compileTemplates (mainCompilation) { + // To prevent multiple compilations for the same template + // the compilation is cached in a promise. + // If it already exists return + if (this.compilationPromise) { + return this.compilationPromise; + } + + // The entry file is just an empty helper as the dynamic template + // require is added in "loader.js" + const outputOptions = { + filename: '__child-[name]', + publicPath: mainCompilation.outputOptions.publicPath + }; + const compilerName = 'HtmlWebpackCompiler'; + // Create an additional child compiler which takes the template + // and turns it into an Node.JS html factory. + // This allows us to use loaders during the compilation + const childCompiler = mainCompilation.createChildCompiler(compilerName, outputOptions); + // The file path context which webpack uses to resolve all relative files to + childCompiler.context = mainCompilation.compiler.context; + // Compile the template to nodejs javascript + new NodeTemplatePlugin(outputOptions).apply(childCompiler); + new NodeTargetPlugin().apply(childCompiler); + new LibraryTemplatePlugin('HTML_WEBPACK_PLUGIN_RESULT', 'var').apply(childCompiler); + new LoaderTargetPlugin('node').apply(childCompiler); + + // Add all templates + this.templates.forEach((template, index) => { + new SingleEntryPlugin(childCompiler.context, template, `HtmlWebpackPlugin_${index}`).apply(childCompiler); + }); + + this.compilationStartedTimestamp = new Date().getTime(); + this.compilationPromise = new Promise((resolve, reject) => { + childCompiler.runAsChild((err, entries, childCompilation) => { + // Extract templates + const compiledTemplates = entries + ? extractHelperFilesFromCompilation(mainCompilation, childCompilation, outputOptions.filename, entries) + : []; + // Extract file dependencies + if (entries) { + this.fileDependencies = { fileDependencies: Array.from(childCompilation.fileDependencies), contextDependencies: Array.from(childCompilation.contextDependencies), missingDependencies: Array.from(childCompilation.missingDependencies) }; + } + // Reject the promise if the childCompilation contains error + if (childCompilation && childCompilation.errors && childCompilation.errors.length) { + const errorDetails = childCompilation.errors.map(error => error.message + (error.error ? ':\n' + error.error : '')).join('\n'); + reject(new Error('Child compilation failed:\n' + errorDetails)); + return; + } + // Reject if the error object contains errors + if (err) { + reject(err); + return; + } + /** + * @type {{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}} + */ + const result = {}; + compiledTemplates.forEach((templateSource, entryIndex) => { + // The compiledTemplates are generated from the entries added in + // the addTemplate function. + // Therefore the array index of this.templates should be the as entryIndex. + result[this.templates[entryIndex]] = { + content: templateSource, + hash: childCompilation.hash, + entry: entries[entryIndex] + }; + }); + this.compilationEndedTimestamp = new Date().getTime(); + resolve(result); + }); + }); + + return this.compilationPromise; + } +} + +/** + * The webpack child compilation will create files as a side effect. + * This function will extract them and clean them up so they won't be written to disk. + * + * Returns the source code of the compiled templates as string + * + * @returns Array + */ +function extractHelperFilesFromCompilation (mainCompilation, childCompilation, filename, childEntryChunks) { + const helperAssetNames = childEntryChunks.map((entryChunk, index) => { + return mainCompilation.mainTemplate.getAssetPath(filename, { + hash: childCompilation.hash, + chunk: entryChunk, + name: `HtmlWebpackPlugin_${index}` + }); + }); + + helperAssetNames.forEach((helperFileName) => { + delete mainCompilation.assets[helperFileName]; + }); + + const helperContents = helperAssetNames.map((helperFileName) => { + return childCompilation.assets[helperFileName].source(); + }); + + return helperContents; +} + +module.exports = { + HtmlWebpackChildCompiler +}; diff --git a/lib/compiler.js b/lib/compiler.js deleted file mode 100644 index a13abf3d..00000000 --- a/lib/compiler.js +++ /dev/null @@ -1,356 +0,0 @@ -// @ts-check -/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ -/** @typedef {import("webpack/lib/Compiler.js")} WebpackCompiler */ -/** @typedef {import("webpack/lib/Chunk.js")} WebpackChunk */ -'use strict'; -/** - * @file - * This file uses webpack to compile a template with a child compiler. - * - * [TEMPLATE] -> [JAVASCRIPT] - * - */ -'use strict'; -const NodeTemplatePlugin = require('webpack/lib/node/NodeTemplatePlugin'); -const NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin'); -const LoaderTargetPlugin = require('webpack/lib/LoaderTargetPlugin'); -const LibraryTemplatePlugin = require('webpack/lib/LibraryTemplatePlugin'); -const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); - -/** - * The HtmlWebpackChildCompiler is a helper to allow resusing one childCompiler - * for multile HtmlWebpackPlugin instances to improve the compilation performance. - */ -class HtmlWebpackChildCompiler { - constructor () { - /** - * @type {string[]} templateIds - * The template array will allow us to keep track which input generated which output - */ - this.templates = []; - /** - * @type {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>} - */ - this.compilationPromise; // eslint-disable-line - /** - * @type {number} - */ - this.compilationStartedTimestamp; // eslint-disable-line - /** - * @type {number} - */ - this.compilationEndedTimestamp; // eslint-disable-line - /** - * All file dependencies of the child compiler - * @type {string[]} - */ - this.fileDependencies = []; - } - - /** - * Add a templatePath to the child compiler - * The given template will be compiled by `compileTemplates` - * @param {string} template - The webpack path to the template e.g. `'!!html-loader!index.html'` - * @returns {boolean} true if the template is new - */ - addTemplate (template) { - const templateId = this.templates.indexOf(template); - // Don't add the template to the compiler if a similar template was already added - if (templateId !== -1) { - return false; - } - // A child compiler can compile only once - // throw an error if a new template is added after the compilation started - if (this.isCompiling()) { - throw new Error('New templates can only be added before `compileTemplates` was called.'); - } - // Add the template to the childCompiler - this.templates.push(template); - // Mark the cache invalid - return true; - } - - /** - * Returns true if the childCompiler is currently compiling - * @retuns {boolean} - */ - isCompiling () { - return !this.didCompile() && this.compilationStartedTimestamp !== undefined; - } - - /** - * Returns true if the childCOmpiler is done compiling - */ - didCompile () { - return this.compilationEndedTimestamp !== undefined; - } - - /** - * This function will start the template compilation - * once it is started no more templates can be added - * - * @param {WebpackCompilation} mainCompilation - * @returns {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>} - */ - compileTemplates (mainCompilation) { - // To prevent multiple compilations for the same template - // the compilation is cached in a promise. - // If it already exists return - if (this.compilationPromise) { - return this.compilationPromise; - } - - // The entry file is just an empty helper as the dynamic template - // require is added in "loader.js" - const outputOptions = { - filename: '__child-[name]', - publicPath: mainCompilation.outputOptions.publicPath - }; - const compilerName = 'HtmlWebpackCompiler'; - // Create an additional child compiler which takes the template - // and turns it into an Node.JS html factory. - // This allows us to use loaders during the compilation - const childCompiler = mainCompilation.createChildCompiler(compilerName, outputOptions); - // The file path context which webpack uses to resolve all relative files to - childCompiler.context = mainCompilation.compiler.context; - // Compile the template to nodejs javascript - new NodeTemplatePlugin(outputOptions).apply(childCompiler); - new NodeTargetPlugin().apply(childCompiler); - new LibraryTemplatePlugin('HTML_WEBPACK_PLUGIN_RESULT', 'var').apply(childCompiler); - new LoaderTargetPlugin('node').apply(childCompiler); - - // Add all templates - this.templates.forEach((template, index) => { - new SingleEntryPlugin(childCompiler.context, template, `HtmlWebpackPlugin_${index}`).apply(childCompiler); - }); - - this.compilationStartedTimestamp = new Date().getTime(); - this.compilationPromise = new Promise((resolve, reject) => { - childCompiler.runAsChild((err, entries, childCompilation) => { - // Extract templates - const compiledTemplates = entries - ? extractHelperFilesFromCompilation(mainCompilation, childCompilation, outputOptions.filename, entries) - : []; - // Extract file dependencies - if (entries) { - this.fileDependencies = Array.from(childCompilation.fileDependencies); - } - // Reject the promise if the childCompilation contains error - if (childCompilation && childCompilation.errors && childCompilation.errors.length) { - const errorDetails = childCompilation.errors.map(error => error.message + (error.error ? ':\n' + error.error : '')).join('\n'); - reject(new Error('Child compilation failed:\n' + errorDetails)); - return; - } - // Reject if the error object contains errors - if (err) { - reject(err); - return; - } - /** - * @type {{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}} - */ - const result = {}; - compiledTemplates.forEach((templateSource, entryIndex) => { - // The compiledTemplates are generated from the entries added in - // the addTemplate function. - // Therefore the array index of this.templates should be the as entryIndex. - result[this.templates[entryIndex]] = { - content: templateSource, - hash: childCompilation.hash, - entry: entries[entryIndex] - }; - }); - this.compilationEndedTimestamp = new Date().getTime(); - resolve(result); - }); - }); - - return this.compilationPromise; - } -} - -/** - * The webpack child compilation will create files as a side effect. - * This function will extract them and clean them up so they won't be written to disk. - * - * Returns the source code of the compiled templates as string - * - * @returns Array - */ -function extractHelperFilesFromCompilation (mainCompilation, childCompilation, filename, childEntryChunks) { - const helperAssetNames = childEntryChunks.map((entryChunk, index) => { - return mainCompilation.mainTemplate.getAssetPath(filename, { - hash: childCompilation.hash, - chunk: entryChunk, - name: `HtmlWebpackPlugin_${index}` - }); - }); - - helperAssetNames.forEach((helperFileName) => { - delete mainCompilation.assets[helperFileName]; - }); - - const helperContents = helperAssetNames.map((helperFileName) => { - return childCompilation.assets[helperFileName].source(); - }); - - return helperContents; -} - -/** - * @type {WeakMap}} - */ -const childCompilerCache = new WeakMap(); - -/** - * Get child compiler from cache or a new child compiler for the given mainCompilation - * - * @param {WebpackCompiler} mainCompiler - */ -function getChildCompiler (mainCompiler) { - const cachedChildCompiler = childCompilerCache.get(mainCompiler); - if (cachedChildCompiler) { - return cachedChildCompiler; - } - const newCompiler = new HtmlWebpackChildCompiler(); - childCompilerCache.set(mainCompiler, newCompiler); - return newCompiler; -} - -/** - * Remove the childCompiler from the cache - * - * @param {WebpackCompiler} mainCompiler - */ -function clearCache (mainCompiler) { - const childCompiler = getChildCompiler(mainCompiler); - // If this childCompiler was already used - // remove the entire childCompiler from the cache - if (childCompiler.isCompiling() || childCompiler.didCompile()) { - childCompilerCache.delete(mainCompiler); - } -} - -/** - * Register a template for the current main compiler - * @param {WebpackCompiler} mainCompiler - * @param {string} templatePath - */ -function addTemplateToCompiler (mainCompiler, templatePath) { - const childCompiler = getChildCompiler(mainCompiler); - const isNew = childCompiler.addTemplate(templatePath); - if (isNew) { - clearCache(mainCompiler); - } -} - -/** - * Starts the compilation for all templates. - * This has to be called once all templates where added. - * - * If this function is called multiple times it will use a cache inside - * the childCompiler - * - * @param {string} templatePath - * @param {string} outputFilename - * @param {WebpackCompilation} mainCompilation - */ -function compileTemplate (templatePath, outputFilename, mainCompilation) { - const childCompiler = getChildCompiler(mainCompilation.compiler); - return childCompiler.compileTemplates(mainCompilation).then((compiledTemplates) => { - if (!compiledTemplates[templatePath]) console.log(Object.keys(compiledTemplates), templatePath); - const compiledTemplate = compiledTemplates[templatePath]; - // Replace [hash] placeholders in filename - const outputName = mainCompilation.mainTemplate.getAssetPath(outputFilename, { - hash: compiledTemplate.hash, - chunk: compiledTemplate.entry - }); - return { - // Hash of the template entry point - hash: compiledTemplate.hash, - // Output name - outputName: outputName, - // Compiled code - content: compiledTemplate.content - }; - }); -} - -/** - * Return all file dependencies of the last child compilation - * - * @param {WebpackCompiler} compiler - * @returns {Array} - */ -function getFileDependencies (compiler) { - const childCompiler = getChildCompiler(compiler); - return childCompiler.fileDependencies; -} - -/** - * @type {WeakMap>}} - */ -const hasOutdatedCompilationDependenciesMap = new WeakMap(); -/** - * Returns `true` if the file dependencies of the current childCompiler - * for the given mainCompilation are outdated. - * - * Uses the `hasOutdatedCompilationDependenciesMap` cache if possible. - * - * @param {WebpackCompilation} mainCompilation - * @returns {boolean} - */ -function hasOutDatedTemplateCache (mainCompilation) { - const childCompiler = getChildCompiler(mainCompilation.compiler); - /** - * @type {WeakMap|undefined} - */ - let hasOutdatedChildCompilerDependenciesMap = hasOutdatedCompilationDependenciesMap.get(mainCompilation); - // Create map for childCompiler if none exist - if (!hasOutdatedChildCompilerDependenciesMap) { - hasOutdatedChildCompilerDependenciesMap = new WeakMap(); - hasOutdatedCompilationDependenciesMap.set(mainCompilation, hasOutdatedChildCompilerDependenciesMap); - } - // Try to get the `checkChildCompilerCache` result from cache - let isOutdated = hasOutdatedChildCompilerDependenciesMap.get(childCompiler); - if (isOutdated !== undefined) { - return isOutdated; - } - // If `checkChildCompilerCache` has never been called for the given - // `mainCompilation` and `childCompiler` combination call it: - isOutdated = isChildCompilerCacheOutdated(mainCompilation, childCompiler); - hasOutdatedChildCompilerDependenciesMap.set(childCompiler, isOutdated); - return isOutdated; -} - -/** - * Returns `true` if the file dependencies of the given childCompiler are outdated. - * - * @param {WebpackCompilation} mainCompilation - * @param {HtmlWebpackChildCompiler} childCompiler - * @returns {boolean} - */ -function isChildCompilerCacheOutdated (mainCompilation, childCompiler) { - // If the compilation was never run there is no invalid cache - if (!childCompiler.compilationStartedTimestamp) { - return false; - } - // Check if any dependent file was changed after the last compilation - const fileTimestamps = mainCompilation.fileTimestamps; - const isCacheOutOfDate = childCompiler.fileDependencies.some((fileDependency) => { - const timestamp = fileTimestamps.get(fileDependency); - // If the timestamp is not known the file is new - // If the timestamp is larger then the file has changed - // Otherwise the file is still the same - return !timestamp || timestamp > childCompiler.compilationStartedTimestamp; - }); - return isCacheOutOfDate; -} - -module.exports = { - addTemplateToCompiler, - compileTemplate, - hasOutDatedTemplateCache, - clearCache, - getFileDependencies -}; diff --git a/lib/file-watcher-api.js b/lib/file-watcher-api.js new file mode 100644 index 00000000..83c78fe8 --- /dev/null +++ b/lib/file-watcher-api.js @@ -0,0 +1,14 @@ +// @ts-check +/** + * To use the availble webpack core api + * we have to use different child compilers + * depending on the used webpack version + */ +const webpackMajorVersion = Number(require('webpack/package.json').version.split('.')[0]); + +// Typescript hack to test only the webpack 4 code +/** @type {import('./webpack4/file-watcher-api')} */ +module.exports = webpackMajorVersion === 4 + ? require('./webpack4/file-watcher-api.js') + // Hack to ignore './webpack5/file-watcher-api.js' from typescript: + : require('./webpack' + 5 + '/file-watcher-api.js'); diff --git a/lib/webpack4/file-watcher-api.js b/lib/webpack4/file-watcher-api.js new file mode 100644 index 00000000..e36a798c --- /dev/null +++ b/lib/webpack4/file-watcher-api.js @@ -0,0 +1,64 @@ +/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ +/** @typedef {{timestamp: number, fileDependencies: string[]}} Snapshot */ +'use strict'; + +/** + * + * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies + * @param {WebpackCompilation} compilation + * @param {number} startTime + */ +function createSnapshot (fileDependencies, compilation, startTime) { + const flatDependencies = []; + Object.keys(fileDependencies).forEach((depencyTypes) => { + fileDependencies[depencyTypes].forEach(fileDependency => { + flatDependencies.push(fileDependency); + }); + }); + return { + fileDependencies: flatDependencies, + timestamp: startTime + }; +} + +/** + * Returns true if the files inside this snapshot + * have not been changed + * + * @param {Snapshot} snapshot + * @param {WebpackCompilation} compilation + * @returns {Promise} + */ +function isSnapShotValid (snapshot, compilation) { + // Check if any dependent file was changed after the last compilation + const fileTimestamps = compilation.fileTimestamps; + const isCacheOutOfDate = snapshot.fileDependencies.some((fileDependency) => { + const timestamp = fileTimestamps.get(fileDependency); + // If the timestamp is not known the file is new + // If the timestamp is larger then the file has changed + // Otherwise the file is still the same + return !timestamp || timestamp > snapshot.timestamp; + }); + return Promise.resolve(!isCacheOutOfDate); +} + +/** + * Ensure that the files keep watched for changes + * and will trigger a recompile + * + * @param {WebpackCompilation} mainCompilation + * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies + */ +function watchFiles (mainCompilation, fileDependencies) { + Object.keys(fileDependencies).forEach((depencyTypes) => { + fileDependencies[depencyTypes].forEach(fileDependency => { + mainCompilation.compilationDependencies.add(fileDependency); + }); + }); +} + +module.exports = { + createSnapshot, + isSnapShotValid, + watchFiles +}; diff --git a/lib/webpack5/file-watcher-api.js b/lib/webpack5/file-watcher-api.js new file mode 100644 index 00000000..1a7c0b9e --- /dev/null +++ b/lib/webpack5/file-watcher-api.js @@ -0,0 +1,71 @@ +/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ +/** @typedef {import("webpack/lib/FileSystemInfo").Snapshot} Snapshot */ +'use strict'; + +/** + * + * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies + * @param {WebpackCompilation} mainCompilation + * @param {number} startTime + */ +function createSnapshot (fileDependencies, mainCompilation, startTime) { + return new Promise((resolve, reject) => { + mainCompilation.fileSystemInfo.createSnapshot( + startTime, + fileDependencies.fileDependencies, + fileDependencies.contextDependencies, + fileDependencies.missingDependencies, + null, + (err, snapshot) => { + if (err) { + return reject(err); + } + resolve(snapshot); + } + ); + }); +} + +/** + * Returns true if the files inside this snapshot + * have not been changed + * + * @param {Snapshot} snapshot + * @param {WebpackCompilation} compilation + * @returns {Promise} + */ +function isSnapShotValid (snapshot, mainCompilation) { + return new Promise((resolve, reject) => { + mainCompilation.fileSystemInfo.checkSnapshotValid( + snapshot, + (err, isValid) => { + if (err) { + reject(err); + } + resolve(isValid); + } + ); + }); +} + +/** + * Ensure that the files keep watched for changes + * and will trigger a recompile + * + * @param {WebpackCompilation} mainCompilation + * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies + */ +function watchFiles (mainCompilation, fileDependencies) { + Object.keys(fileDependencies).forEach((depencyTypes) => { + fileDependencies[depencyTypes].forEach(fileDependency => { + mainCompilation.fileDependencies.add(fileDependency); + mainCompilation[depencyTypes].add(fileDependency); + }); + }); +} + +module.exports = { + createSnapshot, + isSnapShotValid, + watchFiles +}; diff --git a/package.json b/package.json index c0784656..12e12482 100644 --- a/package.json +++ b/package.json @@ -42,12 +42,12 @@ "pug": "2.0.3", "pug-loader": "2.4.0", "rimraf": "2.6.3", - "semistandard": "13.0.1", + "semistandard": "^13.0.1", "standard-version": "5.0.2", "style-loader": "0.23.1", - "typescript": "3.5.2", + "typescript": "3.8.3", "webpack": "4.35.2", - "webpack-recompilation-simulator": "3.0.0" + "webpack-recompilation-simulator": "3.2.0" }, "dependencies": { "@types/html-minifier-terser": "^5.0.0", diff --git a/spec/basic.spec.js b/spec/basic.spec.js index 769fa0ae..63c4b185 100644 --- a/spec/basic.spec.js +++ b/spec/basic.spec.js @@ -405,7 +405,7 @@ describe('HtmlWebpackPlugin', () => { it('works with source maps', done => { testHtmlPlugin({ mode: 'development', - devtool: 'sourcemap', + devtool: 'source-map', entry: path.join(__dirname, 'fixtures/index.js'), output: { path: OUTPUT_DIR, @@ -1044,7 +1044,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).alterAssetTags.tapAsync('HtmlWebpackPluginTest', (object, callback) => { expect(Object.keys(object.assetTags)).toEqual(['scripts', 'styles', 'meta']); eventFired = true; @@ -1078,7 +1078,7 @@ describe('HtmlWebpackPlugin', () => { it('allows events to add a no-value attribute', done => { const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).alterAssetTags.tapAsync('HtmlWebpackPluginTest', (pluginArgs, callback) => { pluginArgs.assetTags.scripts = pluginArgs.assetTags.scripts.map(tag => { if (tag.tagName === 'script') { @@ -1112,7 +1112,7 @@ describe('HtmlWebpackPlugin', () => { it('allows events to remove an attribute by setting it to false', done => { const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).alterAssetTags.tapAsync('HtmlWebpackPluginTest', (pluginArgs, callback) => { pluginArgs.assetTags.scripts = pluginArgs.assetTags.scripts.map(tag => { if (tag.tagName === 'script') { @@ -1147,7 +1147,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; callback(); @@ -1181,7 +1181,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; callback(); @@ -1214,7 +1214,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).afterEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; callback(); @@ -1245,7 +1245,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; object.html += 'Injected by plugin'; @@ -1280,7 +1280,7 @@ describe('HtmlWebpackPlugin', () => { let hookNames; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { hookNames = Object.keys(HtmlWebpackPlugin.getHooks(compilation)).sort(); }); } @@ -1318,7 +1318,7 @@ describe('HtmlWebpackPlugin', () => { let eventFiredForSecondPlugin = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForFirstPlugin = true; object.html += 'Injected by first plugin'; @@ -1329,7 +1329,7 @@ describe('HtmlWebpackPlugin', () => { }; const secondExamplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForSecondPlugin = true; object.html += ' Injected by second plugin'; @@ -1367,7 +1367,7 @@ describe('HtmlWebpackPlugin', () => { let eventFiredForSecondPlugin = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForFirstPlugin = true; const result = _.extend(object, { @@ -1380,7 +1380,7 @@ describe('HtmlWebpackPlugin', () => { }; const secondExamplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForSecondPlugin = true; object.html += ' Injected by second plugin'; @@ -1418,7 +1418,7 @@ describe('HtmlWebpackPlugin', () => { let eventFiredForSecondPlugin = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForFirstPlugin = true; const result = _.extend(object, { @@ -1431,7 +1431,7 @@ describe('HtmlWebpackPlugin', () => { }; const secondExamplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFiredForSecondPlugin = true; const result = _.extend(object, { @@ -1468,7 +1468,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; object.bodyTags.push(HtmlWebpackPlugin.createHtmlTagObject('script', { src: 'funky-script.js' })); @@ -1504,7 +1504,7 @@ describe('HtmlWebpackPlugin', () => { let eventFired = false; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { HtmlWebpackPlugin.getHooks(compilation).beforeAssetTagGeneration.tapAsync('HtmlWebpackPluginTest', (object, callback) => { eventFired = true; object.assets.js.push('funky-script.js'); @@ -1548,7 +1548,7 @@ describe('HtmlWebpackPlugin', () => { let hookLength = 0; const examplePlugin = { apply: function (compiler) { - compiler.plugin('compilation', compilation => { + compiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => { const hooks = HtmlWebpackPlugin.getHooks(compilation); hookLength = hooks.length; // Hook into all hooks @@ -1937,7 +1937,10 @@ describe('HtmlWebpackPlugin', () => { template: path.join(__dirname, 'fixtures/non-existing-template.html') }) ] - }, ['Child compilation failed:\n Entry module not found:'], null, done, true); + }, [Number(webpackMajorVersion) >= 5 + ? 'Child compilation failed:\n Module not found:' + : 'Child compilation failed:\n Entry module not found:' + ], null, done, true); }); it('should sort the chunks in auto mode', done => { diff --git a/spec/caching.spec.js b/spec/caching.spec.js index bbb293cd..f7cbc030 100644 --- a/spec/caching.spec.js +++ b/spec/caching.spec.js @@ -47,7 +47,7 @@ function setUpCompiler (htmlWebpackPlugin) { function getCompiledModules (statsJson) { const builtModules = statsJson.modules.filter(webpackModule => webpackModule.built).map((webpackModule) => { - return module.userRequest; + return webpackModule.name; }); statsJson.children.forEach((childCompilationStats) => { const builtChildModules = getCompiledModules(childCompilationStats); diff --git a/spec/hot.spec.js b/spec/hot.spec.js index 6a2120de..a2f5e156 100644 --- a/spec/hot.spec.js +++ b/spec/hot.spec.js @@ -81,8 +81,8 @@ describe('HtmlWebpackPluginHMR', () => { const hotUpdateJsFileNames = Object.keys(stats.compilation.assets).filter((fileName) => /\.hot-update\.js$/.test(fileName)); expect(hotUpdateJsFileNames).not.toEqual([]); expect(hotUpdateJsFileNames.length).toEqual(1); - const hotUpdateFileSource = stats.compilation.assets[hotUpdateJsFileNames[0]].source(); - expect(hotUpdateFileSource).not.toEqual(''); + const hotUpdateFileSize = stats.compilation.assets[hotUpdateJsFileNames[0]].size(); + expect(hotUpdateFileSize).not.toEqual(0); }) .then(() => compiler.stopWatching()); }); diff --git a/tsconfig.json b/tsconfig.json index 112ef7cb..dfcd473f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,7 +24,9 @@ /* Module Resolution Options */ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "resolveJsonModule": true, + "skipLibCheck": true }, "types": ["node"], "exclude": [ @@ -32,6 +34,7 @@ "spec", "examples", "dist", - "coverage" + "coverage", + "lib/webpack5/*.js" ] }