Repository: jantimon/html-webpack-plugin Branch: main Commit: 723ed41e05b6 Files: 187 Total size: 441.4 KB Directory structure: gitextract_5kqxl4xw/ ├── .cspell.json ├── .editorconfig ├── .eslintrc.js ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── issue_template.md │ ├── lock.yml │ ├── stale.yml │ └── workflows/ │ └── main.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .mailmap ├── .node-version ├── .prettierignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── commitlint.config.js ├── default_index.ejs ├── docs/ │ └── template-option.md ├── examples/ │ ├── README.md │ ├── build-examples.js │ ├── chunk-optimization/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── 192.js │ │ │ ├── 461.js │ │ │ ├── entryA.html │ │ │ ├── entryA.js │ │ │ ├── entryB.html │ │ │ ├── entryB.js │ │ │ ├── entryC.html │ │ │ ├── libMath.js │ │ │ └── libText.js │ │ ├── entryA.js │ │ ├── entryB.js │ │ ├── lib-concat.js │ │ ├── lib-multiply.js │ │ ├── lib-sum.js │ │ ├── main.css │ │ ├── readme.md │ │ └── webpack.config.js │ ├── custom-insertion-position/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ └── index.html │ │ ├── example.js │ │ ├── index.ejs │ │ ├── readme.md │ │ └── webpack.config.js │ ├── custom-template/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── partial.html │ │ ├── readme.md │ │ ├── template.html │ │ └── webpack.config.js │ ├── default/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ └── index.html │ │ ├── example.js │ │ ├── main.css │ │ ├── readme.md │ │ └── webpack.config.js │ ├── favicon/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── favicon.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── template.html │ │ └── webpack.config.js │ ├── html-loader/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── about.html │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── template.html │ │ └── webpack.config.js │ ├── inline/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── readme.md │ │ ├── template.pug │ │ └── webpack.config.js │ ├── javascript/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── partial.html │ │ ├── readme.md │ │ ├── template.js │ │ ├── universal.js │ │ └── webpack.config.js │ ├── javascript-advanced/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── partial.html │ │ ├── readme.md │ │ ├── template.js │ │ ├── universal.js │ │ └── webpack.config.js │ ├── multi-page/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── first.html │ │ │ ├── first.js │ │ │ ├── second.html │ │ │ └── second.js │ │ ├── first.js │ │ ├── main.css │ │ ├── readme.md │ │ ├── second.js │ │ └── webpack.config.js │ ├── pug-loader/ │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── bundle.js │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── example.js │ │ ├── main.css │ │ ├── readme.md │ │ ├── template.pug │ │ ├── time.pug │ │ └── webpack.config.js │ ├── sort-manually/ │ │ ├── a.js │ │ ├── b.js │ │ ├── c.js │ │ ├── d.js │ │ ├── dist/ │ │ │ └── webpack-5/ │ │ │ ├── a.js │ │ │ ├── b.js │ │ │ ├── c.js │ │ │ ├── d.js │ │ │ ├── e.js │ │ │ ├── first-file.html │ │ │ ├── second-file.html │ │ │ └── styles.css │ │ ├── e.js │ │ ├── main.css │ │ ├── template.html │ │ └── webpack.config.js │ └── template-parameters/ │ ├── dist/ │ │ └── webpack-5/ │ │ ├── bundle.js │ │ └── index.html │ ├── example.js │ ├── index.ejs │ ├── readme.md │ └── webpack.config.js ├── flow.puml ├── index.js ├── lib/ │ ├── cached-child-compiler.js │ ├── child-compiler.js │ ├── chunksorter.js │ ├── errors.js │ ├── hooks.js │ ├── html-tags.js │ └── loader.js ├── lint-staged.config.js ├── logs ├── migration.md ├── package.json ├── spec/ │ ├── basic.spec.js │ ├── caching.spec.js │ ├── example.spec.js │ ├── fixtures/ │ │ ├── async.js │ │ ├── common.js │ │ ├── empty.html │ │ ├── empty_html.html │ │ ├── html-template-with-image.html │ │ ├── index.js │ │ ├── interpolation.html │ │ ├── invalid.html │ │ ├── logo.html │ │ ├── main.css │ │ ├── plain.html │ │ ├── spaced_plain.html │ │ ├── src/ │ │ │ └── index.ejs │ │ ├── template-partial.hbs │ │ ├── template.ejs │ │ ├── template.hbs │ │ ├── template.pug │ │ ├── templateParam.cjs │ │ ├── templateParam.js │ │ ├── test.html │ │ ├── theme.js │ │ ├── util.js │ │ └── webpackconfig.html │ └── hot.spec.js ├── tsconfig.json └── typings.d.ts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .cspell.json ================================================ { "version": "0.2", "language": "en,en-gb", "words": [ "commitlint", "chunkhash", "concat", "systemjs", "tapable", "templatehash", "blueimp", "selfclosed", "nocheck", "iife", "appcache", "subresource", "startuml", "autonumber", "enduml", "chunksorter", "urlencode", "sortmode", "harddisk", "Sileghem", "Bname", "Bfile", "webpackconfig", "specialattribute", "dircompare", "wagoid", "autocrlf" ], "ignorePaths": [ "CHANGELOG.md", "coverage", "package.json", "**/dist/**", "**/__snapshots__/**", "**/fixtures/**", "package-lock.json", "node_modules", "coverage", "*.log" ] } ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 indent_style = space indent_size = 2 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false ================================================ FILE: .eslintrc.js ================================================ module.exports = { env: { node: true, commonjs: true, es2021: true, }, extends: "eslint:recommended", ignorePatterns: ["**/dist/**/*.js", "**/spec/fixtures/**/*.js"], overrides: [ { files: [".eslintrc.{js,cjs}"], parserOptions: { sourceType: "script", }, }, { env: { browser: true, es2021: true, }, files: ["**/examples/**"], parserOptions: { sourceType: "script", }, }, ], parserOptions: { ecmaVersion: "latest", }, rules: {}, }; ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: html-webpack-plugin ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a 🕷 report to help us improve --- ## Current behaviour 💣 ## Expected behaviour ☀️ ### Reproduction Example 👾 ## Environment 🖥 ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/issue_template.md ================================================ ## Prerequisites - We realize there is a lot of data requested here. We ask only that you do your best to provide as much information as possible so we can better help you. - Support questions are better asked in one of the following locations: - [Stack Overflow](http://stackoverflow.com/questions/tagged/html-webpack-plugin) - Ensure the issue isn't already reported. - Should be reproducible with the latest version of `html-webpack-plugin`. - (Ensure `npm ls html-webpack-plugin` matches ![](https://img.shields.io/npm/v/html-webpack-plugin.svg)) _Delete the above section and the instructions in the sections below before submitting_ ## Description If this is a feature request, explain why it should be added. Specific use-cases are best. For bug reports, please provide as much _relevant_ info as possible. ### Error Message & Stack Trace ``` COPY THE ERROR MESSAGE, INCLUDING STACK TRACE HERE ``` ### Config Copy the relevant section from `webpack.config.js`: ```js module.exports = { entry: 'app.js', output: { path: 'dist', filename: 'index_bundle.js' }, module: { rules: [ ... ] } plugins: [ new HtmlWebpackPlugin(), ... ] } ``` Copy your template file: ```html My App ``` ## Relevant Links - If your project is public, link to the repo so we can investigate directly. - **BONUS POINTS:** Create a [minimal reproduction](http://stackoverflow.com/help/mcve) and upload it to GitHub. This will get you the fastest support. ## Environment Tell us which operating system you are using, as well as which versions of Node.js, npm, webpack, and html-webpack-plugin. Run the following to get it quickly: ``` node -e "var os=require('os');console.log('Node.js ' + process.version + '\n' + os.platform() + ' ' + os.release())" npm --version npm ls webpack npm ls html-webpack-plugin ``` ================================================ FILE: .github/lock.yml ================================================ # Configuration for lock-threads - https://github.com/dessant/lock-threads # Issues and pull requests with these labels will not be locked. Set to `[]` to disable exemptLabels: [] # Label to add before locking, such as `outdated`. Set to `false` to disable lockLabel: false # Comment to post before locking. Set to `false` to disable lockComment: false # Number of days of inactivity before a closed issue or pull request is locked daysUntilLock: 30 ================================================ FILE: .github/stale.yml ================================================ # Number of days of inactivity before an issue becomes stale daysUntilStale: 180 # Number of days of inactivity before a stale issue is closed daysUntilClose: 15 # Issues with these labels will never be considered stale exemptLabels: - pinned - security # Label to use when marking an issue as stale staleLabel: wontfix # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > **This issue had no activity for at least half a year.** It's subject to automatic issue closing if there is no activity in the next 15 days. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: false ================================================ FILE: .github/workflows/main.yml ================================================ name: CI on: push: branches: - main pull_request: branches: - main jobs: lint: name: Lint - ${{ matrix.os }} - Node v${{ matrix.node-version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} strategy: matrix: os: [ubuntu-latest] node-version: [lts/*] runs-on: ${{ matrix.os }} concurrency: group: lint-${{ matrix.os }}-v${{ matrix.node-version }}-${{ github.ref }} cancel-in-progress: true steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install dependencies run: npm ci --legacy-peer-deps - name: Lint run: npm run lint - name: Security audit run: npm run security -- --only=prod - name: Check commit message uses: wagoid/commitlint-github-action@v5 build: name: test Node ${{ matrix.node }} Webpack ${{ matrix.webpack }} ${{ matrix.os }} timeout-minutes: 15 runs-on: ${{ matrix.os }} concurrency: group: ${{ github.workflow }}-${{ matrix.os }}-v${{ matrix.node }}-${{ matrix.webpack }}-${{ github.ref }} cancel-in-progress: true strategy: matrix: node: [ "10.x", "12.x", "14.x", "16.x", "18.x", "20.x", "22.x", "24.x", "25.x", ] os: [ubuntu-latest, windows-latest, macOS-latest] webpack: [latest] steps: - name: Setup Git if: matrix.os == 'windows-latest' run: git config --global core.autocrlf input - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install dependencies run: npm ci --legacy-peer-deps - name: Install webpack ${{ matrix.webpack-version }} if: matrix.webpack-version != 'latest' run: npm i webpack@${{ matrix.webpack-version }} --legacy-peer-deps - name: Run tests for webpack version ${{ matrix.webpack-version }} run: npm run test:coverage -- --ci - name: Submit coverage data to codecov uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} ================================================ FILE: .gitignore ================================================ /node_modules/ /dist/ /coverage/ npm-debug.*.log yarn.lock npm-debug.log.* /.idea/ .eslintcache .cspellcache ================================================ FILE: .husky/commit-msg ================================================ npx --no-install commitlint --edit $1 ================================================ FILE: .husky/pre-commit ================================================ npx --no-install lint-staged ================================================ FILE: .mailmap ================================================ Chris Greening Jan Nicklas Jan Nicklas Ma Cheng Michał Gołębiowski-Owczarek Thomas Grainger Thomas Grainger Zhanwei Wu ================================================ FILE: .node-version ================================================ 10.13.0 ================================================ FILE: .prettierignore ================================================ /coverage /dist /node_modules /spec/fixtures CHANGELOG.md examples/*/dist ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. ### [5.6.6](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.5...v5.6.6) (2026-01-16) ### Bug Fixes * compatibility with handlebars-loader ([#1882](https://github.com/jantimon/html-webpack-plugin/issues/1882)) ([a8e563b](https://github.com/jantimon/html-webpack-plugin/commit/a8e563b9872e98193ebca75a886fc2657711e722)) ### [5.6.5](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.4...v5.6.5) (2025-11-18) ### Bug Fixes * localStorage exception in Node 25+ ([#1880](https://github.com/jantimon/html-webpack-plugin/issues/1880)) ([a25aa2e](https://github.com/jantimon/html-webpack-plugin/commit/a25aa2e0202fa35bbecf35cc45327dfc34ef938b)) ### [5.6.4](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.3...v5.6.4) (2025-08-14) ### Bug Fixes * compilation.errors should contain Error objects ([#1877](https://github.com/jantimon/html-webpack-plugin/issues/1877)) ([b733b1a](https://github.com/jantimon/html-webpack-plugin/commit/b733b1a91875c85eb5c08c130c5538eda5c9d090)) ### [5.6.3](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.2...v5.6.3) (2024-10-23) ### Bug Fixes * hooks file for old plugins ([#1867](https://github.com/jantimon/html-webpack-plugin/issues/1867)) ([0585a36](https://github.com/jantimon/html-webpack-plugin/commit/0585a364b2868a456713593540f738fe266d0028)) ### [5.6.2](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.1...v5.6.2) (2024-10-17) ### Bug Fixes * allow bundle empty html ([#1865](https://github.com/jantimon/html-webpack-plugin/issues/1865)) ([f5b9140](https://github.com/jantimon/html-webpack-plugin/commit/f5b9140cc3232cb695453d8e5f3140a5af59acc8)) ### [5.6.1](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.0...v5.6.1) (2024-10-17) ### Bug Fixes * avoid importing all of lodash ([#1864](https://github.com/jantimon/html-webpack-plugin/issues/1864)) ([2caf5db](https://github.com/jantimon/html-webpack-plugin/commit/2caf5db9641d487e07439f96d2840b940800aff5)) * don't use `initialize` hooks to allow dynamic plugin injection ([ae85878](https://github.com/jantimon/html-webpack-plugin/commit/ae85878c3812b72d891ce368d81ce05b72c3748e)) * handle `childCompilation.errors` being an iterator rather than array ([#1863](https://github.com/jantimon/html-webpack-plugin/issues/1863)) ([4c0c894](https://github.com/jantimon/html-webpack-plugin/commit/4c0c8943903e99ba01c7a50477ed5457513ba122)) ## [5.6.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.5.4...v5.6.0) (2023-12-19) ### Features * add `@rspack/core` as an optional peer dependency ([#1829](https://github.com/jantimon/html-webpack-plugin/issues/1829)) ([56ff3ae](https://github.com/jantimon/html-webpack-plugin/commit/56ff3aeaf17a592bf2cfb25219cfdf5aad6cc47d)) * Added support `type=systemjs-module` via the `scriptLoading` option ([#1822](https://github.com/jantimon/html-webpack-plugin/issues/1822)) ([7effc30](https://github.com/jantimon/html-webpack-plugin/commit/7effc30df89a6553a20bf7915d97daa067bb4173)) ### Bug Fixes * memory leak ([#1836](https://github.com/jantimon/html-webpack-plugin/issues/1836)) ([c79f2cf](https://github.com/jantimon/html-webpack-plugin/commit/c79f2cfdb3aaa6f1dbd87b64c7d13bc9ab21c59f)) ### [5.5.4](https://github.com/jantimon/html-webpack-plugin/compare/v5.5.3...v5.5.4) (2023-12-06) ### Bug Fixes * avoid have undefined `type` for script tags ([#1809](https://github.com/jantimon/html-webpack-plugin/issues/1809)) ([9959484](https://github.com/jantimon/html-webpack-plugin/commit/9959484f5337872f5af2a2f738228f5348a93901)) * reemit assets from loaders ([#1811](https://github.com/jantimon/html-webpack-plugin/issues/1811)) ([a214736](https://github.com/jantimon/html-webpack-plugin/commit/a21473675c81dc4ac2ec8112741cbd52a2756dcc)) * reemit favicon in serve/watch mode ([#1804](https://github.com/jantimon/html-webpack-plugin/issues/1804)) ([57c5a4e](https://github.com/jantimon/html-webpack-plugin/commit/57c5a4ebcfc4008686ae233f0c94434757c02329)) ### [5.5.3](https://github.com/jantimon/html-webpack-plugin/compare/v5.5.2...v5.5.3) (2023-06-10) ### Bug Fixes * don't add extra meta tag if it exists ([#1802](https://github.com/jantimon/html-webpack-plugin/issues/1802)) ([8f92788](https://github.com/jantimon/html-webpack-plugin/commit/8f927889a3a98d06472b662135954457385cc926)) * pass all Node.js globals to templates ([#1796](https://github.com/jantimon/html-webpack-plugin/issues/1796)) ([f269fc0](https://github.com/jantimon/html-webpack-plugin/commit/f269fc01fe619c5a98388017770040dae6263928)) * **types:** fix type for `chunkSortMode` ([#1798](https://github.com/jantimon/html-webpack-plugin/issues/1798)) ([6ad0e55](https://github.com/jantimon/html-webpack-plugin/commit/6ad0e556276da22b17747b15eb0e52bb9aa77c75)) ### [5.5.2](https://github.com/jantimon/html-webpack-plugin/compare/v5.5.1...v5.5.2) (2023-06-08) ### Bug Fixes * compatibility with ES modules output ([#1795](https://github.com/jantimon/html-webpack-plugin/issues/1795)) ([eda853b](https://github.com/jantimon/html-webpack-plugin/commit/eda853bbcc1e47be99352cf0b097da6011d3730e)) ### [5.5.1](https://github.com/jantimon/html-webpack-plugin/compare/v5.5.0...v5.5.1) (2023-04-15) ### Bug Fixes * **perf:** defer loading of pretty-error to improve startup time ([#1789](https://github.com/jantimon/html-webpack-plugin/issues/1789)) ([988709d](https://github.com/jantimon/html-webpack-plugin/commit/988709d8b0142d1654f66a94bbde4e5f40172242)) ## [5.5.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.4.0...v5.5.0) (2021-10-25) ### Features * Support type=module via scriptLoading option ([1e42625](https://github.com/jantimon/html-webpack-plugin/commit/1e4262528ff02a83e1fc7739b42472680fd205c2)), closes [#1663](https://github.com/jantimon/html-webpack-plugin/issues/1663) ### [5.4.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.3.2...v5.3.3) (2021-10-15) ### Features * update terser ([9c7fba0](https://github.com/jantimon/html-webpack-plugin/pull/1688) ### [5.3.2](https://github.com/jantimon/html-webpack-plugin/compare/v5.3.1...v5.3.2) (2021-06-22) ### Bug Fixes * update lodash and pretty error ([9c7fba0](https://github.com/jantimon/html-webpack-plugin/commit/9c7fba02d0aa7d9e804863a66eb896db3046f645) ### [5.3.1](https://github.com/jantimon/html-webpack-plugin/compare/v5.3.0...v5.3.1) (2021-03-09) ### Bug Fixes * remove loader-utils from plugin core ([82d0ee8](https://github.com/jantimon/html-webpack-plugin/commit/82d0ee8ddf146f17d71e98c1b44b2f2ec7420051)) ## [5.3.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.2.0...v5.3.0) (2021-03-07) ### Features * allow to modify the interpolation options in webpack config ([d654f5b](https://github.com/jantimon/html-webpack-plugin/commit/d654f5b90022304335b372d424ff4c08d3a9d341)) * drop loader-utils dependency ([41d7a50](https://github.com/jantimon/html-webpack-plugin/commit/41d7a50516aefd1af2704e3837d5d41351c6199b)) ## [5.2.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.1.0...v5.2.0) (2021-02-19) ### Features * improve ssr ([73d2a66](https://github.com/jantimon/html-webpack-plugin/commit/73d2a660b10b9ebf8a341f0ddb173bcaaf1e513c)) ## [5.1.0](https://github.com/jantimon/html-webpack-plugin/compare/v5.0.0...v5.1.0) (2021-02-12) ### Features * omit html tag attribute with null/undefined/false value ([aa6e78d](https://github.com/jantimon/html-webpack-plugin/commit/aa6e78d1430c17d9cf05550b2c9f73a9a0c0166c)), closes [#1598](https://github.com/jantimon/html-webpack-plugin/issues/1598) ## [5.0.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.5.1...v5.0.0) (2021-02-03) ### ⚠ BREAKING CHANGES * Drop support for `webpack` 4 and `node` <= 10 - For older webpack or node versions please use `html-webpack-plugin` 4.x * Entry javascript resources are now being loaded deferred in the `` tag to improve the page load performance by default - You can set the `scriptLoading` option to `'blocking'` to keep the previous behaviour * Setting publicPath to `''` (an empty string) will no longer calculate a relative path from the html file to the assets anymore - You can set the `publicPath` option to `'auto'` to keep the previous behaviour * Plugins for `html-webpack-plugin` which add additional assetTags should provide a `meta` attribute * Drop support for `appcache-webpack-plugin` ### Features * drop `webpack` 4 and `node` <= 10 support to make use of the latest APIs ([b7a9e8f](https://github.com/jantimon/html-webpack-plugin/commit/b7a9e8f2a3c146cfec8f5c42888abd6aa0cde0b9)) * use the new webpack 5 APIs and create html files during the new `webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS` compilation stage ([8964bc4](https://github.com/jantimon/html-webpack-plugin/commit/8964bc4182e41807a564d3000217a40bc5f93ad2), [b6895cb](https://github.com/jantimon/html-webpack-plugin/commit/b6895cb5b85b1e6e850f638470cf9b839d421516), [a97234e](https://github.com/jantimon/html-webpack-plugin/commit/a97234ead5ea2dbba07a6e6a70c5ddb6a5a3c288), [1b59e09](https://github.com/jantimon/html-webpack-plugin/commit/1b59e0944f561b264f11847ef245c9fc3f05b80f), [4fca596](https://github.com/jantimon/html-webpack-plugin/commit/4fca5965315c49f6706812d9fdf6c7284d23d75b), [ed64a6b](https://github.com/jantimon/html-webpack-plugin/commit/ed64a6b35fe9cdbc610e9b766700f3b2fc2b8e4c), [86245db](https://github.com/jantimon/html-webpack-plugin/commit/86245db670a9b3bdd0e2aba9f2031745a98434c7), [50b3bec](https://github.com/jantimon/html-webpack-plugin/commit/50b3bec51a43289d6d1b4e1e6439560eb791576f), [c697725](https://github.com/jantimon/html-webpack-plugin/commit/c697725e9f4dd990bd4b7927bbfa7b826d2f36f2)) * allow generating one file per chunk with the new `'[name]'` placeholder for the `filename` option ([cd5bd2a](https://github.com/jantimon/html-webpack-plugin/commit/cd5bd2afc902bbe5a5ceec4756ef634a26aa1332), [3d9ff48](https://github.com/jantimon/html-webpack-plugin/commit/3d9ff48543d04d9f7c3440bfefb43751775a9e81)) * the `filename` option can now be a function ([c5beb4b](https://github.com/jantimon/html-webpack-plugin/commit/c5beb4bd16e4916b5355c300abebf9d7d3c587da)) * add support for `'auto'` public paths inside templates ([a059fcf](https://github.com/jantimon/html-webpack-plugin/commit/a059fcf32d94aaaa738359cedce0b0e4af68f0de), [b09b439](https://github.com/jantimon/html-webpack-plugin/commit/b09b439f50ecb75994acde2eb2967ad690ff1cf0)) * use defer as default script loading mechanism ([35b6b87](https://github.com/jantimon/html-webpack-plugin/commit/35b6b878db17f0f5704a187b336a14fdd58cedfc)) * allow to set publicPath to an empty string `''` ([5ea7de4](https://github.com/jantimon/html-webpack-plugin/commit/5ea7de4ba271813835be700316c8a1763b205d2d)) * improve typings ([197ddd8](https://github.com/jantimon/html-webpack-plugin/commit/197ddd88f39a2e6e70863b6fed2385d33043d137)) * provide public path to the alterAssetTagGroups hook ([1b54dfb](https://github.com/jantimon/html-webpack-plugin/commit/1b54dfbd62c0d0df10dd3d2be9937626142d518f)) * provide public path to the alterAssetTags hook ([b754626](https://github.com/jantimon/html-webpack-plugin/commit/b75462653d11803a428b1d29479e259c3010163f)) * use `thisCompilation` in child compiler for faster builds ([1d59e9a](https://github.com/jantimon/html-webpack-plugin/commit/1d59e9a71ddba1429168c42569a7bd9bdd363f4f)) * export new major in static property ([8b692bd](https://github.com/jantimon/html-webpack-plugin/commit/8b692bd7cc0b75ddf55f47da317eed9bd19dab91)) * reduce dependencies ([8c28aaa](https://github.com/jantimon/html-webpack-plugin/commit/8c28aaa2bed5a7147b397fef3801cfe8fb5c34b9), [56e633f](https://github.com/jantimon/html-webpack-plugin/commit/56e633fcb90909c2bbedbd63590ecaa825d8b31f)) ### Bug Fixes * emit files on every build to work properly with plugins like the clean-webpack-plugin ([6b3d087](https://github.com/jantimon/html-webpack-plugin/commit/6b3d087cf17f63b596c298d70a42a7462dd0f881)) * generate html files even if no webpack entry exists ([2693dfa](https://github.com/jantimon/html-webpack-plugin/commit/2693dfaf4c94625eab86afadfd0e4d8822092d6b)) * keep binary format when adding assets ([7e2b208](https://github.com/jantimon/html-webpack-plugin/commit/7e2b208634e26299c509e0c6b3189e01e4c3d3df)), closes [#1537](https://github.com/jantimon/html-webpack-plugin/issues/1537) ## [4.5.2](https://github.com/jantimon/html-webpack-plugin/compare/v4.5.1...v4.5.2) (2021-02-18) ### Bug Fixes * more robust variable value extraction to add support for webpack >= 5.22.0 ([1aabaf9](https://github.com/jantimon/html-webpack-plugin/commit/1aabaf99820257cbe7d3efccb62b42254ad35e04)) ### [4.5.1](https://github.com/jantimon/html-webpack-plugin/compare/v4.5.0...v4.5.1) (2021-01-03) ### Bug Fixes * inject javascripts in the tag for inject:true and scriptLoading:'defer' ([4f7064e](https://github.com/jantimon/html-webpack-plugin/commit/4f7064ee56fe710e8f416018956647a72c270fb1)) # [4.5.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.4.1...v4.5.0) (2020-09-21) ### Features * Add publicPath option to overrule the default path generation ([#1516](https://github.com/jantimon/html-webpack-plugin/issues/1516)) ([19b5122](https://github.com/jantimon/html-webpack-plugin/commit/19b5122)) * update webpack dependency range to allow installing webpack 5 beta ([f3ccdd5](https://github.com/jantimon/html-webpack-plugin/commit/f3ccdd5)), closes [#1504](https://github.com/jantimon/html-webpack-plugin/issues/1504) ## [4.4.1](https://github.com/jantimon/html-webpack-plugin/compare/v4.4.0...v4.4.1) (2020-08-30) ### Bug Fixes * broken typings.d.ts in v4.4.0 ([#1503](https://github.com/jantimon/html-webpack-plugin/issues/1503)) ([98ad756](https://github.com/jantimon/html-webpack-plugin/commit/98ad756)) # [4.4.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.3.0...v4.4.0) (2020-08-30) ### Bug Fixes * fix typos in comments ([#1484](https://github.com/jantimon/html-webpack-plugin/issues/1484)) ([6b0711e](https://github.com/jantimon/html-webpack-plugin/commit/6b0711e)) ### Features * added v5 compilation support and deleted depreciation warnings ([4ae7be8](https://github.com/jantimon/html-webpack-plugin/commit/4ae7be8)), closes [#1454](https://github.com/jantimon/html-webpack-plugin/issues/1454) # [4.3.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.2.2...v4.3.0) (2020-04-30) ### Features * Allow to use console.log inside templates ([c3f2fdc](https://github.com/jantimon/html-webpack-plugin/commit/c3f2fdc)) ## [4.2.2](https://github.com/jantimon/html-webpack-plugin/compare/v4.2.1...v4.2.2) (2020-04-30) ### Bug Fixes * Prevent "cannot read property info of undefined" when reading meta information from assets ([253ce30](https://github.com/jantimon/html-webpack-plugin/commit/253ce30)) * use modern icon tag rel attribute for favicons ([c40dd85](https://github.com/jantimon/html-webpack-plugin/commit/c40dd85)) ## [4.2.1](https://github.com/jantimon/html-webpack-plugin/compare/v4.2.0...v4.2.1) (2020-04-28) ### Bug Fixes * don't add dependencies twice to the webpack 5 watcher api ([ceafe14](https://github.com/jantimon/html-webpack-plugin/commit/ceafe143650749a5f53a14411dc1b762e252ec44)) * prevent scripts marked as hotModuleReplacement from being added to the html file ([119252a](https://github.com/jantimon/html-webpack-plugin/commit/119252a381bf43dea37c1be64f90c10bebc21302)) # [4.2.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.1.0...v4.2.0) (2020-04-09) ### Features * Add template content ([#1401](https://github.com/jantimon/html-webpack-plugin/issues/1401)) ([4740bf7](https://github.com/jantimon/html-webpack-plugin/commit/4740bf7)) # [4.1.0](https://github.com/jantimon/html-webpack-plugin/compare/v4.0.4...v4.1.0) (2020-04-09) ### Features * Add webpack 5 support ([39c38a4](https://github.com/jantimon/html-webpack-plugin/commit/39c38a4)) * Allow webpack 5 as peer dependency ([9c571e2](https://github.com/jantimon/html-webpack-plugin/commit/9c571e2)) ## [4.0.4](https://github.com/jantimon/html-webpack-plugin/compare/v4.0.3...v4.0.4) (2020-04-01) ### Bug Fixes * Fix querystring encoding ([#1386](https://github.com/jantimon/html-webpack-plugin/issues/1386)) ([4f48a39](https://github.com/jantimon/html-webpack-plugin/commit/4f48a39e5738a5d431be2bec39c1b1f0de800d57)), closes [#1355](https://github.com/jantimon/html-webpack-plugin/issues/1355) ## [4.0.3](https://github.com/jantimon/html-webpack-plugin/compare/v4.0.2...v4.0.3) (2020-03-28) ### Bug Fixes * add webpack, tapable and html-minifier-terser as dependencies because of types.d.ts ([238da81](https://github.com/jantimon/html-webpack-plugin/commit/238da8123950f87267954fd448f3e6b0fb1ead17)) ## [4.0.2](https://github.com/jantimon/html-webpack-plugin/compare/v4.0.1...v4.0.2) (2020-03-26) ### Bug Fixes * don't remove trailing slashes from self closing tags by default ([2281e4b](https://github.com/jantimon/html-webpack-plugin/commit/2281e4bfda9b91c4a83d63bfc8df8372d1e6ae9e)) ## [4.0.1](https://github.com/jantimon/html-webpack-plugin/compare/v4.0.0...v4.0.1) (2020-03-23) ### Bug Fixes * update typedefs to match with html-minifier-terser ([2698c7e](https://github.com/jantimon/html-webpack-plugin/commit/2698c7e45a7f12113a07b256dc400ec89666130d)) # [4.0.0](https://github.com/jantimon/html-webpack-plugin/compare/v3.2.0...v4.0.0) (2020-03-23) The summary can be found in the [**release blog post**](https://dev.to/jantimon/html-webpack-plugin-4-has-been-released-125d). ### Bug Fixes * Add dependencies from the child compilation to the main compilation ([27c3e72](https://github.com/jantimon/html-webpack-plugin/commit/27c3e727b073701bfc739859d8325435d27cbf35)) * Add typing for assets(Close jantimon[#1243](https://github.com/jantimon/html-webpack-plugin/issues/1243)) ([9fef060](https://github.com/jantimon/html-webpack-plugin/commit/9fef0603eb532b3e6a1e8871b4568e62f9bba1a3)) * allow `contenthash` along with `templatehash` ([049d4d3](https://github.com/jantimon/html-webpack-plugin/commit/049d4d3436092b8beff3f5745e77b20f1c168c4c)), closes [#1033](https://github.com/jantimon/html-webpack-plugin/issues/1033) * Catch and ignore pretty-error errors ([2056139](https://github.com/jantimon/html-webpack-plugin/commit/2056139a9533ff9487506531491c0e5a94003607)), closes [#921](https://github.com/jantimon/html-webpack-plugin/issues/921) * Drop @types/webpack dependency ([d4eb1c7](https://github.com/jantimon/html-webpack-plugin/commit/d4eb1c749316af3964126606fe6c70a233c30fef)) * Ignore foreign child compilers ([1422664](https://github.com/jantimon/html-webpack-plugin/commit/14226649aa1bbaf7b174bcacafdbe47d8ba6c851)) * Improve perfomance for appcache files ([b94e043](https://github.com/jantimon/html-webpack-plugin/commit/b94e0434f5dbb06ee2179e91ebaa2ce7801937e0)) * load script files before style files files in defer script loading mode ([97f9fb9](https://github.com/jantimon/html-webpack-plugin/commit/97f9fb9a68e4d3c3c9453296c352e831f7546937)) * Prevent chunks from beeing added multiple times ([d65b37d](https://github.com/jantimon/html-webpack-plugin/commit/d65b37d2c588047e0d81a38f4645fcdb3ead0b9e)) * Prevent lodash from being inlined to work around a babel-loader incompatibility ([7f21910](https://github.com/jantimon/html-webpack-plugin/commit/7f21910707a2b53a9a5da3ac9e4b01e36147402f)), closes [#1223](https://github.com/jantimon/html-webpack-plugin/issues/1223) * Remove compilation.getStats() call for performance reasons ([7005a55](https://github.com/jantimon/html-webpack-plugin/commit/7005a557529bee948c5ef0a1b8b44a1a41a28417)) * remove useless links for options ([#1153](https://github.com/jantimon/html-webpack-plugin/issues/1153)) ([267e0e0](https://github.com/jantimon/html-webpack-plugin/commit/267e0e0eac155569c822c34f120490bdf3f56d43)) * Update references to html-minifier ([24bf1b5](https://github.com/jantimon/html-webpack-plugin/commit/24bf1b5e2a0d087b30d057d1780d8f495aa01e26)), closes [#1311](https://github.com/jantimon/html-webpack-plugin/issues/1311) * **typings.d.ts:** added apply method type to HtmlWwbpackPlugin class definitoin ([8b7255f](https://github.com/jantimon/html-webpack-plugin/commit/8b7255f555423dd1bfa51a3c28700e4bd116f97b)), closes [jantimon#1244](https://github.com/jantimon/issues/1244) * rename `contenthash` to `templatehash` ([4c11c5d](https://github.com/jantimon/html-webpack-plugin/commit/4c11c5dfde9d87d71dce9cf51864648f8e42b912)) * Repair typings ([#1166](https://github.com/jantimon/html-webpack-plugin/issues/1166)) ([f4cb241](https://github.com/jantimon/html-webpack-plugin/commit/f4cb241157a9a1fed4721b1abc1f390b09595494)) * small type. minifcation instead of minification ([#1154](https://github.com/jantimon/html-webpack-plugin/issues/1154)) ([56037a6](https://github.com/jantimon/html-webpack-plugin/commit/56037a6b2ae4a7606b54f5af213b6a2b8145f95e)) * Use src/index.ejs by default if present ([#1167](https://github.com/jantimon/html-webpack-plugin/issues/1167)) ([c27e5e4](https://github.com/jantimon/html-webpack-plugin/commit/c27e5e46a334d9c1e177a521ea7c9a5ba3c6d980)) * **chunksorter:** Don't sort chunks by default ([22fb03f](https://github.com/jantimon/html-webpack-plugin/commit/22fb03fb17fdb37d5ce6de00af154b5575a02d3a)) * **loader:** switch to loaderUtils.getOptions ([a0a0f0d](https://github.com/jantimon/html-webpack-plugin/commit/a0a0f0dc755fbc3249aa2e1d1c6a4dd307ab8e8a)) * **README:** adds a link to template option documentation ([f40aeae](https://github.com/jantimon/html-webpack-plugin/commit/f40aeae312af73c6c5263cd99e81069f41d3b699)) * **tests:** Upgrade webpack-recompilation-simulator ([dfe1d10](https://github.com/jantimon/html-webpack-plugin/commit/dfe1d10c4511b0da4354cacf79ca0d5ac7baf862)) * Update lodash to 4.17.10 ([cc3bf49](https://github.com/jantimon/html-webpack-plugin/commit/cc3bf4909605879993c22e3048ee520dbdc8fa49)) ### Code Refactoring * Change the structure of the internal assets object ([37db086](https://github.com/jantimon/html-webpack-plugin/commit/37db0868efdbf334a1b60003fe5bd376cfd8ae01)) * Changed hook names and arguments - the hook order is 'beforeAssetTagGeneration', 'alterAssetTags', 'alterAssetTagGroups', 'afterTemplateExecution', 'beforeEmit', 'afterEmit' ([14b4456](https://github.com/jantimon/html-webpack-plugin/commit/14b4456ba67a5b85421b558bbd5f1d59c7b410b3)) * Use Webpack 4 APIs ([47efdea](https://github.com/jantimon/html-webpack-plugin/commit/47efdeaf17806f7d4e26aefacc748a92077f904a)) ### Features * add `.toString` implementation to htmlTags to allow easier rendering ([34d8aa5](https://github.com/jantimon/html-webpack-plugin/commit/34d8aa572c7acc59c26f3b5d15bf489a07aa4c24)) * Add default viewport meta tag for default template ([302e39e](https://github.com/jantimon/html-webpack-plugin/commit/302e39e30013b5828bb6c9e7036db951f70d0cf5)), closes [#897](https://github.com/jantimon/html-webpack-plugin/issues/897) [#978](https://github.com/jantimon/html-webpack-plugin/issues/978) * Add defer script loading ([de315eb](https://github.com/jantimon/html-webpack-plugin/commit/de315eb98497f3e5f517d59dbbe120b48c9b8db9)) * Add support for relative publicPath ([dbbdd81](https://github.com/jantimon/html-webpack-plugin/commit/dbbdd81de570dd181ea0905a6445fdeb5a784912)) * Add support for tag ([#1160](https://github.com/jantimon/html-webpack-plugin/issues/1160)) ([c5d4b86](https://github.com/jantimon/html-webpack-plugin/commit/c5d4b869c196c59cdd6a9c30db58f1f8be07a820)) * Add support for minifying inline ES6 inside html templates ([c66766c](https://github.com/jantimon/html-webpack-plugin/commit/c66766cdae3593091dee413b9c585359c24ef068)), closes [#1262](https://github.com/jantimon/html-webpack-plugin/issues/1262) * Add support for the [contenthash] placeholder inside htm file names ([ae8233a](https://github.com/jantimon/html-webpack-plugin/commit/ae8233a04d4105b6e970feaa2c5e11c0b48fd4b7)) * Add typings to package.json ([a524e8f](https://github.com/jantimon/html-webpack-plugin/commit/a524e8f24e905d5e51fedd50d33a41328a9b87eb)), closes [#1132](https://github.com/jantimon/html-webpack-plugin/issues/1132) * Allow to return async template parameters ([99f9362](https://github.com/jantimon/html-webpack-plugin/commit/99f9362703055baf0029b8852cb5339b6218829d)) * drop workaround for "Uncaught TypeError: __webpack_require__(...) is not a function" to be compatible with webpack 5 ([15ad0d2](https://github.com/jantimon/html-webpack-plugin/commit/15ad0d260443edfdcc953fa08c675c90c063bac7)) * Export major version of this plugin ([6ae6f48](https://github.com/jantimon/html-webpack-plugin/commit/6ae6f48ecf92b080809d68092ee8c6825edfe5a4)) * merge templateParameters with default template parameters ([1d66e53](https://github.com/jantimon/html-webpack-plugin/commit/1d66e5333bc2aeb8caadf96e572af756d3708d19)) * Provide a verbose error message if html minification failed ([7df269f](https://github.com/jantimon/html-webpack-plugin/commit/7df269fd2a840d0800cb259bd559edb0b766e7ab)) * **compiler:** Add file dependencies ([bbc07a3](https://github.com/jantimon/html-webpack-plugin/commit/bbc07a3a214e3b693e6c9e3d6404e146a0fc023a)) * **compiler:** Use a single compiler for multiple plugin instances ([f29ae88](https://github.com/jantimon/html-webpack-plugin/commit/f29ae886d7fad50e7fbb78ac7ff7d5bd9bc47f49)) * **compiler:** Use timestamps to verify cache validity ([0ebcd17](https://github.com/jantimon/html-webpack-plugin/commit/0ebcd1776132262b799f2814659f4d90c3f3c1b3)) * Remove selfClosingTag ([5d3d8e4](https://github.com/jantimon/html-webpack-plugin/commit/5d3d8e4b73b7b97dba8bdf5fe1ecf50598040b54)) * Remove type="text/javascript" from injected script tags ([b46bf67](https://github.com/jantimon/html-webpack-plugin/commit/b46bf67ae4492a12b60c42c7d26831e480522b49)) * Replace jade with pug in examples ([d7ec407](https://github.com/jantimon/html-webpack-plugin/commit/d7ec4078c85b3ed9c2ff84e10fe75392f26a6130)) * Switch from jasmine to jest ([ae1f435](https://github.com/jantimon/html-webpack-plugin/commit/ae1f43527945c8ae953c2ba549631f2d090e003a)) * **hooks:** Add a helper for easier hook access ([b6dec4b](https://github.com/jantimon/html-webpack-plugin/commit/b6dec4bf1072509282756e8d83ef6ee447485f3a)) * **hooks:** Provide static getHook method for access to all html-webpack-plugin hooks ([#995](https://github.com/jantimon/html-webpack-plugin/issues/995)) ([82b34a1](https://github.com/jantimon/html-webpack-plugin/commit/82b34a1dd2e96cbcd715fafe4e97073efd30cc9f)) * Simplify element and charset attribute ([55313be](https://github.com/jantimon/html-webpack-plugin/commit/55313bee9b82ea79157085e48bba4fa2ebfef6a4)) * support ES6 template string in default loader ([d6b65dd](https://github.com/jantimon/html-webpack-plugin/commit/d6b65dd1531038deac1be87c2087da5955903d24)), closes [#950](https://github.com/jantimon/html-webpack-plugin/issues/950) * Use jsdoc for static typing ([a6b8d2d](https://github.com/jantimon/html-webpack-plugin/commit/a6b8d2dcf3b1183d50589b869162b972ad32de4d)) * Use webpack 4 entries api to extract asset information ([342867e](https://github.com/jantimon/html-webpack-plugin/commit/342867e1edb7c2a8748b0aca396f160f0b13d42e)) * **html-tags:** Add a helper to create html-tags ([ee6a165](https://github.com/jantimon/html-webpack-plugin/commit/ee6a165425a6b47dff341fb651848ec5727d7f7e)) ### BREAKING CHANGES * **defaults:** Use src/index.ejs if no template option is set. * **defaults:** The default template has now a predefined viewport meta tag * **defaults:** The default meta utf-8 declaration was changed to * **hooks:** Renamed beforeHtmlGeneration hook to beforeAssetTagGeneration * **hooks:** Renamed beforeHtmlProcessing hook to alterAssetTags * **hooks:** Renamed afterHtmlProcessing hook to beforeEmit * **hooks:** The html-webpack-plugin doesn't add its hooks to the compilation object anymore * The assets object which is used for the template parameters and inside hooks was changed. The chunks property was removed and the js and css property was converted from a string into an object `{ entryName: string, path: string}` * The mimetype information "text/javascript" is removed from all generated script tags * Remove selfClosingTag attribute * Template strings inside templates are now disabled by default * Dropped support for Webpack 1 - 3 * Template variable webpack was removed * **chunksorter:** Chunks aren't sorted anymore by default # [3.2.0](https://github.com/jantimon/html-webpack-plugin/compare/v3.1.0...v3.2.0) (2018-04-03) ### Bug Fixes * **loader:** Allow to add new template parameters ([f7eac19](https://github.com/jantimon/html-webpack-plugin/commit/f7eac19)), closes [#915](https://github.com/jantimon/html-webpack-plugin/issues/915) * **loader:** Use lodash inside the loader directly ([7b4eb7f](https://github.com/jantimon/html-webpack-plugin/commit/7b4eb7f)), closes [#786](https://github.com/jantimon/html-webpack-plugin/issues/786) ### Features * Add meta tag option ([a7d37ca](https://github.com/jantimon/html-webpack-plugin/commit/a7d37ca)) * Support node 6.9 ([74a22c4](https://github.com/jantimon/html-webpack-plugin/commit/74a22c4)), closes [#918](https://github.com/jantimon/html-webpack-plugin/issues/918) # [3.1.0](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.8...v3.1.0) (2018-03-22) ### Features * Allow to overwrite the templateParameter [#830](https://github.com/jantimon/html-webpack-plugin/issues/830) ([c5e32d3](https://github.com/jantimon/html-webpack-plugin/commit/c5e32d3)) ## [3.0.8](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.7...v3.0.8) (2018-03-22) ### Bug Fixes * **compiler:** Fallback to 3.0.7 because of [#900](https://github.com/jantimon/html-webpack-plugin/issues/900) ([05ee29b](https://github.com/jantimon/html-webpack-plugin/commit/05ee29b)) ## [3.0.7](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.6...v3.0.7) (2018-03-19) ### Bug Fixes * **compiler:** Set single entry name [#895](https://github.com/jantimon/html-webpack-plugin/issues/895) ([26dcb98](https://github.com/jantimon/html-webpack-plugin/commit/26dcb98)) ## [3.0.6](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.5...v3.0.6) (2018-03-06) ### Bug Fixes * **hooks:** Call tapable.apply directly [#879](https://github.com/jantimon/html-webpack-plugin/issues/879) ([bcbb036](https://github.com/jantimon/html-webpack-plugin/commit/bcbb036)) ## [3.0.5](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.2...v3.0.5) (2018-03-06) ### Bug Fixes * **entries:** do not ignore JS if there is also CSS ([020b714](https://github.com/jantimon/html-webpack-plugin/commit/020b714)) * **entries:** Don't add css entries twice ([0348d6b](https://github.com/jantimon/html-webpack-plugin/commit/0348d6b)) * **hooks:** Remove deprecated tapable calls [#879](https://github.com/jantimon/html-webpack-plugin/issues/879) ([2288f20](https://github.com/jantimon/html-webpack-plugin/commit/2288f20)) ## [3.0.4](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.2...v3.0.4) (2018-03-01) ### Bug Fixes * **entries:** Don't add css entries twice ([e890f23](https://github.com/jantimon/html-webpack-plugin/commit/e890f23)) ## [3.0.3](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.2...v3.0.3) (2018-03-01) ### Refactor * **performance:** Reduce the amount of chunk information gathered based on #825 ([06c59a7](https://github.com/jantimon/html-webpack-plugin/commit/06c59a7)) ## [3.0.2](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.1...v3.0.2) (2018-03-01) ### Bug Fixes * **query-loader:** In case no query is provided, return an empty object. This fixes #727 ([7587754](https://github.com/jantimon/html-webpack-plugin/commit/7587754)) ## [3.0.1](https://github.com/jantimon/html-webpack-plugin/compare/v3.0.0...v3.0.1) (2018-03-01) ### Bug Fixes * **package:** Remove the extract-text-webpack-plugin peer dependency ([57411a9](https://github.com/jantimon/html-webpack-plugin/commit/57411a9)) ## [3.0.0](https://github.com/jantimon/html-webpack-plugin/compare/v2.30.1...v3.0.0) (2018-28-02) ### Features * Add support for the new [webpack tapable](https://github.com/webpack/tapable) to be compatible with webpack 4.x * Remove bluebird dependency ### BREAKING CHANGES * Similar to webpack 4.x the support for node versions older than 6 are no longer supported ## 2.30.1 * Revert part the performance optimization ([#723](https://github.com/jantimon/html-webpack-plugin/pull/723)) because of [#753](https://github.com/jantimon/html-webpack-plugin/issues/753). ## 2.30.0 * Add manual sort * Performance improvements ([#723](https://github.com/jantimon/html-webpack-plugin/pull/723)) ## 2.29.0 * Add support for Webpack 3 ## 2.28.0 * Backport 3.x void tag for plugin authors ## 2.27.1 * Revert 2.25.0 loader resolving ## 2.27.0 * Fix a chunksorter webpack 2 issue ([#569](https://github.com/jantimon/html-webpack-plugin/pull/569)) * Fix template path resolving ([#542](https://github.com/jantimon/html-webpack-plugin/pull/542)) ## 2.26.0 * Allow plugins to add attributes without values to the ` ``` If you have multiple `webpack` entry points, they will all be included with `script` tags in the generated HTML. If you have any CSS assets in webpack's output (for example, CSS extracted with the [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin)) then these will be included with `` tags in the HTML head. If you have plugins that make use of it, `html-webpack-plugin` should be ordered first before any of the integrated Plugins.

Options

You can pass a hash of configuration options to `html-webpack-plugin`. Allowed values are as follows: | Name | Type | Default | Description | | :----------------------: | :--------------------------------------------------: | :---------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`title`** | `{String}` | `Webpack App` | The title to use for the generated HTML document | | **`filename`** | `{String\|Function}` | `'index.html'` | The file to write the HTML to. Defaults to `index.html`. You can specify a subdirectory here too (eg: `assets/admin.html`). The `[name]` placeholder will be replaced with the entry name. Can also be a function e.g. `(entryName) => entryName + '.html'`. | | **`template`** | `{String}` | `` | `webpack` relative or absolute path to the template. By default it will use `src/index.ejs` if it exists. Please see the [docs](https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md) for details | | **`templateContent`** | `{string\|Function\|false}` | false | Can be used instead of `template` to provide an inline template - please read the [Writing Your Own Templates](https://github.com/jantimon/html-webpack-plugin#writing-your-own-templates) section | | **`templateParameters`** | `{Boolean\|Object\|Function}` | `false` | Allows to overwrite the parameters used in the template - see [example](https://github.com/jantimon/html-webpack-plugin/tree/master/examples/template-parameters) | | **`inject`** | `{Boolean\|String}` | `true` | `true \|\| 'head' \|\| 'body' \|\| false` Inject all assets into the given `template` or `templateContent`. When passing `'body'` all javascript resources will be placed at the bottom of the body element. `'head'` will place the scripts in the head element. Passing `true` will add it to the head/body depending on the `scriptLoading` option. Passing `false` will disable automatic injections. - see the [inject:false example](https://github.com/jantimon/html-webpack-plugin/tree/master/examples/custom-insertion-position) | | **`publicPath`** | `{String\|'auto'}` | `'auto'` | The publicPath used for script and link tags | | **`scriptLoading`** | `{'blocking'\|'defer'\|'module'\|'systemjs-module'}` | `'defer'` | Modern browsers support non blocking javascript loading (`'defer'`) to improve the page startup performance. Setting to `'module'` adds attribute [`type="module"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#applying_the_module_to_your_html). This also implies "defer", since modules are automatically deferred. | | **`favicon`** | `{String}` | `` | Adds the given favicon path to the output HTML | | **`meta`** | `{Object}` | `{}` | Allows to inject `meta`-tags. E.g. `meta: {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}` | | **`base`** | `{Object\|String\|false}` | `false` | Inject a [`base`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base) tag. E.g. `base: "https://example.com/path/page.html` | | **`minify`** | `{Boolean\|Object}` | `true` if `mode` is `'production'`, otherwise `false` | Controls if and in what ways the output should be minified. See [minification](#minification) below for more details. | | **`hash`** | `{Boolean}` | `false` | If `true` then append a unique `webpack` compilation hash to all included scripts and CSS files (i.e. `main.js?hash=compilation_hash`). This is useful for cache busting | | **`cache`** | `{Boolean}` | `true` | Emit the file only if it was changed | | **`showErrors`** | `{Boolean}` | `true` | Errors details will be written into the HTML page | | **`chunks`** | `{?}` | `?` | Allows you to add only some chunks (e.g only the unit-test chunk) | | **`chunksSortMode`** | `{String\|Function}` | `auto` | Allows to control how chunks should be sorted before they are included to the HTML. Allowed values are `'none' \| 'auto' \| 'manual' \| {Function}` | | **`excludeChunks`** | `{Array.}` | `` | Allows you to skip some chunks (e.g don't add the unit-test chunk) | | **`xhtml`** | `{Boolean}` | `false` | If `true` render the `link` tags as self-closing (XHTML compliant) | Here's an example webpack config illustrating how to use these options **webpack.config.js** ```js { entry: 'index.js', output: { path: __dirname + '/dist', filename: 'index_bundle.js' }, plugins: [ new HtmlWebpackPlugin({ title: 'My App', filename: 'assets/admin.html' }) ] } ``` ### Generating Multiple HTML Files To generate more than one HTML file, declare the plugin more than once in your plugins array **webpack.config.js** ```js { entry: 'index.js', output: { path: __dirname + '/dist', filename: 'index_bundle.js' }, plugins: [ new HtmlWebpackPlugin(), // Generates default index.html new HtmlWebpackPlugin({ // Also generate a test.html filename: 'test.html', template: 'src/assets/test.html' }) ] } ``` ### Writing Your Own Templates If the default generated HTML doesn't meet your needs you can supply your own template. The easiest way is to use the `template` option and pass a custom HTML file. The html-webpack-plugin will automatically inject all necessary CSS, JS, manifest and favicon files into the markup. Details of other template loaders are [documented here](https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md). ```js plugins: [ new HtmlWebpackPlugin({ title: "Custom template", // Load a custom template (lodash by default) template: "index.html", }), ]; ``` **index.html** ```html <%= htmlWebpackPlugin.options.title %> ``` If you already have a template loader, you can use it to parse the template. Please note that this will also happen if you specify the html-loader and use `.html` file as template. **webpack.config.js** ```js module: { loaders: [ { test: /\.hbs$/, loader: "handlebars-loader" } ] }, plugins: [ new HtmlWebpackPlugin({ title: 'Custom template using Handlebars', template: 'index.hbs' }) ] ``` You can use the `lodash` syntax out of the box. If the `inject` feature doesn't fit your needs and you want full control over the asset placement use the [default template](https://github.com/jaketrent/html-webpack-template/blob/86f285d5c790a6c15263f5cc50fd666d51f974fd/index.html) of the [html-webpack-template project](https://github.com/jaketrent/html-webpack-template) as a starting point for writing your own. The following variables are available in the template by default (you can extend them using the `templateParameters` option): - `htmlWebpackPlugin`: data specific to this plugin - `htmlWebpackPlugin.options`: the options hash that was passed to the plugin. In addition to the options actually used by this plugin, you can use this hash to pass arbitrary data through to your template. - `htmlWebpackPlugin.tags`: the prepared `headTags` and `bodyTags` Array to render the ``, ``, ` ================================================ FILE: examples/chunk-optimization/dist/webpack-5/entryA.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 910 (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { __webpack_require__(192); var multiply = __webpack_require__(199); var concat = __webpack_require__(631); var h1 = document.createElement("h1"); h1.innerHTML = concat("Hello world from Entry ", multiply(1, 1)); document.body.appendChild(h1); /***/ } /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ // 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; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 570: 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /******/ /* webpack/runtime/nonce */ /******/ (() => { /******/ __webpack_require__.nc = undefined; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [646,209,461,192], () => (__webpack_require__(910))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; ================================================ FILE: examples/chunk-optimization/dist/webpack-5/entryB.html ================================================ Webpack App ================================================ FILE: examples/chunk-optimization/dist/webpack-5/entryB.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 123 (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { __webpack_require__(192); var multiply = __webpack_require__(199); var h1 = document.createElement("h1"); h1.innerHTML = "Hello world from Entry " + multiply(1, 2); document.body.appendChild(h1); /***/ } /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ // 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; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 761: 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /******/ /* webpack/runtime/nonce */ /******/ (() => { /******/ __webpack_require__.nc = undefined; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [646,461,192], () => (__webpack_require__(123))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; ================================================ FILE: examples/chunk-optimization/dist/webpack-5/entryC.html ================================================ Webpack App ================================================ FILE: examples/chunk-optimization/dist/webpack-5/libMath.js ================================================ (self["webpackChunk"] = self["webpackChunk"] || []).push([[646],{ /***/ 16 (module) { module.exports = function sum(a, b) { return a + b; }; /***/ }, /***/ 199 (module, __unused_webpack_exports, __webpack_require__) { var sum = __webpack_require__(16); module.exports = function multiply(a, b) { var m = 0; for (var i = 0; i < a; i = sum(i, 1)) { m = sum(m, b); } return m; }; /***/ } }]); ================================================ FILE: examples/chunk-optimization/dist/webpack-5/libText.js ================================================ (self["webpackChunk"] = self["webpackChunk"] || []).push([[209],{ /***/ 631 (module) { module.exports = function concat(a, b) { return String(a) + String(b); }; /***/ } }]); ================================================ FILE: examples/chunk-optimization/entryA.js ================================================ require("./main.css"); var multiply = require("./lib-multiply.js"); var concat = require("./lib-concat.js"); var h1 = document.createElement("h1"); h1.innerHTML = concat("Hello world from Entry ", multiply(1, 1)); document.body.appendChild(h1); ================================================ FILE: examples/chunk-optimization/entryB.js ================================================ require("./main.css"); var multiply = require("./lib-multiply.js"); var h1 = document.createElement("h1"); h1.innerHTML = "Hello world from Entry " + multiply(1, 2); document.body.appendChild(h1); ================================================ FILE: examples/chunk-optimization/lib-concat.js ================================================ module.exports = function concat(a, b) { return String(a) + String(b); }; ================================================ FILE: examples/chunk-optimization/lib-multiply.js ================================================ var sum = require("./lib-sum.js"); module.exports = function multiply(a, b) { var m = 0; for (var i = 0; i < a; i = sum(i, 1)) { m = sum(m, b); } return m; }; ================================================ FILE: examples/chunk-optimization/lib-sum.js ================================================ module.exports = function sum(a, b) { return a + b; }; ================================================ FILE: examples/chunk-optimization/main.css ================================================ body { background: snow; } ================================================ FILE: examples/chunk-optimization/readme.md ================================================ # zero-config example in this example only the default configuration is used ================================================ FILE: examples/chunk-optimization/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: { entryA: "./entryA.js", entryB: "./entryB.js", }, output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), publicPath: "", filename: "[name].js", }, module: { rules: [ { test: /\.css$/, use: ["style-loader", "css-loader"] }, { test: /\.png$/, type: "asset/resource" }, ], }, optimization: { splitChunks: { chunks: "all", minSize: 0, maxAsyncRequests: 9, maxInitialRequests: 9, name: false, cacheGroups: { libMath: { test: /lib-(multiply|sum)/, name: "libMath", chunks: "all", }, libText: { test: /lib-concat/, name: "libText", chunks: "all", }, }, }, }, plugins: [ new HtmlWebpackPlugin({ filename: "entryA.html", chunks: ["entryA"], }), new HtmlWebpackPlugin({ filename: "entryB.html", chunks: ["entryB"], }), new HtmlWebpackPlugin({ filename: "entryC.html", }), ], }; ================================================ FILE: examples/custom-insertion-position/dist/webpack-5/bundle.js ================================================ /******/ (() => { // webpackBootstrap var h1 = document.createElement("h1"); h1.innerHTML = "Hello world!"; document.body.appendChild(h1); /******/ })() ; ================================================ FILE: examples/custom-insertion-position/dist/webpack-5/index.html ================================================ Custom insertion example All scripts are placed here: ================================================ FILE: examples/custom-insertion-position/example.js ================================================ var h1 = document.createElement("h1"); h1.innerHTML = "Hello world!"; document.body.appendChild(h1); ================================================ FILE: examples/custom-insertion-position/index.ejs ================================================ <%= htmlWebpackPlugin.tags.headTags %> Custom insertion example All scripts are placed here: <%= htmlWebpackPlugin.tags.bodyTags %> ================================================ FILE: examples/custom-insertion-position/readme.md ================================================ # custom insertion example This example shows how you can define the position where the scripts are injected by setting `inject:false` and using the template parameters inside the `index.ejs` The example is using the template parameters `headTags` and `bodyTags` ``` <%= htmlWebpackPlugin.tags.headTags %> <%= htmlWebpackPlugin.tags.bodyTags %> ``` `headTags` and `bodyTags` are arrays so you can use any Array.prototype function like `filter`: ``` <%= htmlWebpackPlugin .tags .headTags .filter((tag) => tag.tagName === 'meta') .join('') %> ``` For further information about the tag object take a look at the `createHtmlTagObject` inside `lib/html-tags.js` or at the `prepareAssetTagGroupForRendering` inside `index.js`. ================================================ FILE: examples/custom-insertion-position/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: "./example.js", output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), publicPath: "", filename: "bundle.js", }, plugins: [ new HtmlWebpackPlugin({ template: "index.ejs", inject: false, // The following settings are optional and only used for // demo purposes: meta: { charset: { charset: "utf-8" }, viewport: "width=device-width, initial-scale=1", }, minify: false, }), ], }; ================================================ FILE: examples/custom-template/dist/webpack-5/bundle.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 969 (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); // 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 /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.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/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; __webpack_require__(969); var h1 = document.createElement("h1"); h1.innerHTML = "Hello world!"; document.body.appendChild(h1); /******/ })() ; ================================================ FILE: examples/custom-template/dist/webpack-5/index.html ================================================ Webpack App

Partial

================================================ FILE: examples/custom-template/dist/webpack-5/styles.css ================================================ body { background: snow; } ================================================ FILE: examples/custom-template/example.js ================================================ require("./main.css"); var h1 = document.createElement("h1"); h1.innerHTML = "Hello world!"; document.body.appendChild(h1); ================================================ FILE: examples/custom-template/main.css ================================================ body { background: snow; } ================================================ FILE: examples/custom-template/partial.html ================================================

Partial

================================================ FILE: examples/custom-template/readme.md ================================================ # custom template This example uses a custom underscore template which inlines an partial using the html-loader: `<%= require('html-loader!./partial.html').default %>` ================================================ FILE: examples/custom-template/template.html ================================================ <%= htmlWebpackPlugin.options.title %> <%= require('html-loader!./partial.html').default %> ================================================ FILE: examples/custom-template/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var MiniCssExtractPlugin = require("mini-css-extract-plugin"); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: "./example.js", output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), publicPath: "", filename: "bundle.js", }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] }, { test: /\.png$/, type: "asset/resource" }, ], }, plugins: [ new HtmlWebpackPlugin({ template: "template.html", }), new MiniCssExtractPlugin({ filename: "styles.css" }), ], }; ================================================ FILE: examples/default/dist/webpack-5/bundle.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 192 (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(591); /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(810); var options = {}; options.insert = "head"; options.singleton = false; var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, options); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.locals || {}); /***/ }, /***/ 591 (module, __unused_webpack_exports, __webpack_require__) { "use strict"; var isOldIE = function isOldIE() { var memo; return function memorize() { if (typeof memo === 'undefined') { // 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 memo = Boolean(window && document && document.all && !window.atob); } return memo; }; }(); var getTarget = function getTarget() { var memo = {}; return function memorize(target) { if (typeof memo[target] === 'undefined') { var styleTarget = document.querySelector(target); // 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) { // istanbul ignore next styleTarget = null; } } memo[target] = styleTarget; } return memo[target]; }; }(); var stylesInDom = []; function getIndexByIdentifier(identifier) { var result = -1; for (var i = 0; i < stylesInDom.length; i++) { if (stylesInDom[i].identifier === identifier) { result = i; break; } } return result; } function modulesToDom(list, options) { var idCountMap = {}; var identifiers = []; for (var i = 0; i < list.length; i++) { var item = list[i]; var id = options.base ? item[0] + options.base : item[0]; var count = idCountMap[id] || 0; var identifier = "".concat(id, " ").concat(count); idCountMap[id] = count + 1; var index = getIndexByIdentifier(identifier); var obj = { css: item[1], media: item[2], sourceMap: item[3] }; if (index !== -1) { stylesInDom[index].references++; stylesInDom[index].updater(obj); } else { stylesInDom.push({ identifier: identifier, updater: addStyle(obj, options), references: 1 }); } identifiers.push(identifier); } return identifiers; } function insertStyleElement(options) { var style = document.createElement('style'); var attributes = options.attributes || {}; if (typeof attributes.nonce === 'undefined') { var nonce = true ? __webpack_require__.nc : 0; if (nonce) { attributes.nonce = nonce; } } Object.keys(attributes).forEach(function (key) { style.setAttribute(key, attributes[key]); }); if (typeof options.insert === 'function') { options.insert(style); } else { var target = getTarget(options.insert || 'head'); if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); } target.appendChild(style); } return style; } function removeStyleElement(style) { // istanbul ignore if if (style.parentNode === null) { return false; } style.parentNode.removeChild(style); } /* istanbul ignore next */ var replaceText = function replaceText() { var textStore = []; return function replace(index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); }; }(); function applyToSingletonTag(style, index, remove, obj) { var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = style.childNodes; if (childNodes[index]) { style.removeChild(childNodes[index]); } if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } } } function applyToTag(style, options, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if (media) { style.setAttribute('media', media); } else { style.removeAttribute('media'); } if (sourceMap && typeof btoa !== 'undefined') { css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); } // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = css; } else { while (style.firstChild) { style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); } } var singleton = null; var singletonCounter = 0; function addStyle(obj, options) { var style; var update; var remove; if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else { style = insertStyleElement(options); update = applyToTag.bind(null, style, options); remove = function remove() { removeStyleElement(style); }; } update(obj); return function updateStyle(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { return; } update(obj = newObj); } else { remove(); } }; } module.exports = function (list, options) { options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of ================================================ FILE: examples/inline/dist/webpack-5/styles.css ================================================ body { background: snow; } ================================================ FILE: examples/inline/example.js ================================================ "use strict"; require("./main.css"); console.log("Hello World"); ================================================ FILE: examples/inline/main.css ================================================ body { background: snow; } ================================================ FILE: examples/inline/readme.md ================================================ # isomorphic pug example This example shows how to use a different template engine (in this case pug) to load the `time.pug` template on the backend and frontend. ================================================ FILE: examples/inline/template.pug ================================================ doctype html html head meta(charset="utf-8") title #{htmlWebpackPlugin.options.title} body each cssFile in htmlWebpackPlugin.files.css style !{compilation.assets[cssFile.substr(htmlWebpackPlugin.files.publicPath.length)].source()} each jsFile in htmlWebpackPlugin.files.js script !{compilation.assets[jsFile.substr(htmlWebpackPlugin.files.publicPath.length)].source()} ================================================ FILE: examples/inline/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var MiniCssExtractPlugin = require("mini-css-extract-plugin"); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: "./example.js", output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), publicPath: "", filename: "bundle.js", }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] }, { test: /\.pug$/, loader: "pug-loader" }, ], }, plugins: [ new HtmlWebpackPlugin({ inject: false, cache: false, template: "template.pug", filename: "index.html", favicon: "favicon.ico", title: "pug demo", }), new MiniCssExtractPlugin({ filename: "styles.css" }), ], }; ================================================ FILE: examples/javascript/dist/webpack-5/bundle.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 48 (module) { "use strict"; // This file is used for frontend and backend // If compiled by the html-webpack-plugin // HTML_WEBPACK_PLUGIN is set to true: var backend = typeof HTML_WEBPACK_PLUGIN !== "undefined"; module.exports = function () { return "Hello World from " + (backend ? "backend" : "frontend"); }; /***/ }, /***/ 969 (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); // 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 /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.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/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; __webpack_require__(969); var universal = __webpack_require__(48); var h1 = document.createElement("h1"); h1.innerHTML = universal(); document.body.appendChild(h1); /******/ })() ; ================================================ FILE: examples/javascript/dist/webpack-5/index.html ================================================ Hello World from backend2026-01-16T16:38:04.038Z

Partial

================================================ FILE: examples/javascript/dist/webpack-5/styles.css ================================================ body { background: snow; } ================================================ FILE: examples/javascript/example.js ================================================ require("./main.css"); var universal = require("./universal.js"); var h1 = document.createElement("h1"); h1.innerHTML = universal(); document.body.appendChild(h1); ================================================ FILE: examples/javascript/main.css ================================================ body { background: snow; } ================================================ FILE: examples/javascript/partial.html ================================================

Partial

================================================ FILE: examples/javascript/readme.md ================================================ # isomorphic javascript example This example shows how to generate a template on the fly using javascript. The best way to debug the compilation result is `devTool:eval` ================================================ FILE: examples/javascript/template.js ================================================ // Webpack require: var partial = require("./partial.html").default; var universal = require("./universal.js"); // Export a function / promise / or a string: module.exports = universal() + new Date().toISOString() + partial; ================================================ FILE: examples/javascript/universal.js ================================================ // This file is used for frontend and backend "use strict"; // If compiled by the html-webpack-plugin // HTML_WEBPACK_PLUGIN is set to true: var backend = typeof HTML_WEBPACK_PLUGIN !== "undefined"; module.exports = function () { return "Hello World from " + (backend ? "backend" : "frontend"); }; ================================================ FILE: examples/javascript/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var MiniCssExtractPlugin = require("mini-css-extract-plugin"); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: "./example.js", output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), filename: "bundle.js", }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] }, { test: /\.png$/, type: "asset/resource" }, { test: /\.html$/, loader: "html-loader" }, ], }, plugins: [ new HtmlWebpackPlugin({ template: "template.js", }), new MiniCssExtractPlugin({ filename: "styles.css" }), ], }; ================================================ FILE: examples/javascript-advanced/dist/webpack-5/bundle.js ================================================ /* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is 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__ = ({ /***/ 48 (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:///./universal.js?\n}"); /***/ }, /***/ 695 (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("{__webpack_require__(969);\n\nvar universal = __webpack_require__(48);\nvar h1 = document.createElement(\"h1\");\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?\n}"); /***/ }, /***/ 969 (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack:///./main.css?\n}"); /***/ } /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.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/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval devtool is used. /******/ var __webpack_exports__ = __webpack_require__(695); /******/ /******/ })() ; ================================================ FILE: examples/javascript-advanced/dist/webpack-5/index.html ================================================ Webpack AppHello World from backend -

Partial

================================================ FILE: examples/javascript-advanced/dist/webpack-5/styles.css ================================================ body { background: snow; } ================================================ FILE: examples/javascript-advanced/example.js ================================================ require("./main.css"); var universal = require("./universal.js"); var h1 = document.createElement("h1"); h1.innerHTML = universal(); document.body.appendChild(h1); ================================================ FILE: examples/javascript-advanced/main.css ================================================ body { background: snow; } ================================================ FILE: examples/javascript-advanced/partial.html ================================================

Partial

================================================ FILE: examples/javascript-advanced/readme.md ================================================ # isomorphic javascript-advanced example This example is similar to the javascript example however it allows takes parameters from the config and works asynchronously ================================================ FILE: examples/javascript-advanced/template.js ================================================ // Webpack require: var partial = require("./partial.html").default; var universal = require("./universal.js"); // Export a function / promise / or a string: // This function has to return a string or promised string: module.exports = function (templateParams) { var html = "" + "" + templateParams.htmlWebpackPlugin.options.title + "" + "" + universal() + " - " + partial + ""; return html; }; ================================================ FILE: examples/javascript-advanced/universal.js ================================================ // This file is used for frontend and backend "use strict"; // If compiled by the html-webpack-plugin // HTML_WEBPACK_PLUGIN is set to true: var backend = typeof HTML_WEBPACK_PLUGIN !== "undefined"; module.exports = function () { return "Hello World from " + (backend ? "backend" : "frontend"); }; ================================================ FILE: examples/javascript-advanced/webpack.config.js ================================================ var path = require("path"); var HtmlWebpackPlugin = require("../.."); var MiniCssExtractPlugin = require("mini-css-extract-plugin"); var webpackMajorVersion = require("webpack/package.json").version.split(".")[0]; module.exports = { context: __dirname, entry: "./example.js", output: { path: path.join(__dirname, "dist/webpack-" + webpackMajorVersion), publicPath: "", filename: "bundle.js", }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] }, { test: /\.png$/, type: "asset/resource" }, { test: /\.html$/, loader: "html-loader" }, ], }, devtool: "eval", plugins: [ new HtmlWebpackPlugin({ template: "template.js", }), new MiniCssExtractPlugin({ filename: "styles.css" }), ], }; ================================================ FILE: examples/multi-page/dist/webpack-5/first.html ================================================ Webpack App ================================================ FILE: examples/multi-page/dist/webpack-5/first.js ================================================ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 192 (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(591); /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(810); var options = {}; options.insert = "head"; options.singleton = false; var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, options); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_main_css__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.locals || {}); /***/ }, /***/ 591 (module, __unused_webpack_exports, __webpack_require__) { "use strict"; var isOldIE = function isOldIE() { var memo; return function memorize() { if (typeof memo === 'undefined') { // 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 memo = Boolean(window && document && document.all && !window.atob); } return memo; }; }(); var getTarget = function getTarget() { var memo = {}; return function memorize(target) { if (typeof memo[target] === 'undefined') { var styleTarget = document.querySelector(target); // 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) { // istanbul ignore next styleTarget = null; } } memo[target] = styleTarget; } return memo[target]; }; }(); var stylesInDom = []; function getIndexByIdentifier(identifier) { var result = -1; for (var i = 0; i < stylesInDom.length; i++) { if (stylesInDom[i].identifier === identifier) { result = i; break; } } return result; } function modulesToDom(list, options) { var idCountMap = {}; var identifiers = []; for (var i = 0; i < list.length; i++) { var item = list[i]; var id = options.base ? item[0] + options.base : item[0]; var count = idCountMap[id] || 0; var identifier = "".concat(id, " ").concat(count); idCountMap[id] = count + 1; var index = getIndexByIdentifier(identifier); var obj = { css: item[1], media: item[2], sourceMap: item[3] }; if (index !== -1) { stylesInDom[index].references++; stylesInDom[index].updater(obj); } else { stylesInDom.push({ identifier: identifier, updater: addStyle(obj, options), references: 1 }); } identifiers.push(identifier); } return identifiers; } function insertStyleElement(options) { var style = document.createElement('style'); var attributes = options.attributes || {}; if (typeof attributes.nonce === 'undefined') { var nonce = true ? __webpack_require__.nc : 0; if (nonce) { attributes.nonce = nonce; } } Object.keys(attributes).forEach(function (key) { style.setAttribute(key, attributes[key]); }); if (typeof options.insert === 'function') { options.insert(style); } else { var target = getTarget(options.insert || 'head'); if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); } target.appendChild(style); } return style; } function removeStyleElement(style) { // istanbul ignore if if (style.parentNode === null) { return false; } style.parentNode.removeChild(style); } /* istanbul ignore next */ var replaceText = function replaceText() { var textStore = []; return function replace(index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); }; }(); function applyToSingletonTag(style, index, remove, obj) { var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = style.childNodes; if (childNodes[index]) { style.removeChild(childNodes[index]); } if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } } } function applyToTag(style, options, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if (media) { style.setAttribute('media', media); } else { style.removeAttribute('media'); } if (sourceMap && typeof btoa !== 'undefined') { css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); } // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = css; } else { while (style.firstChild) { style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); } } var singleton = null; var singletonCounter = 0; function addStyle(obj, options) { var style; var update; var remove; if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else { style = insertStyleElement(options); update = applyToTag.bind(null, style, options); remove = function remove() { removeStyleElement(style); }; } update(obj); return function updateStyle(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { return; } update(obj = newObj); } else { remove(); } }; } module.exports = function (list, options) { options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of