jantimon / html-webpack-plugin

Simplifies creation of HTML files to serve your webpack bundles
MIT License
10.72k stars 1.31k forks source link

Writing Your Own Templates section does not work #1826

Open einazare opened 1 year ago

einazare commented 1 year ago

Current behaviour πŸ’£

I am trying to use the templateParameters to pass some variables into my template and it does not work. I have followed the examples shown:

Expected behaviour β˜€οΈ

I would like my <%= title %> to be replaced with the actual value of my templateParameters.title value, i.e. value located inside locales/de-DE.json or locales/en-GB.json. I've also tried to modify the <%= title %> to <%= htmlWebpackPlugin.options.templateParameters.title %>.

Reproduction Example πŸ‘Ύ

I have created a small repository to reproduce this issue here: https://github.com/einazare/html-webpack-plugin-18n-generator You will need to:

  1. Install the dependencies with npm install
  2. Build the application with npm run build
  3. Open dist/index.html
  4. You will see <%= title %> was not replaced by Some title written in English (Great Britain)

Environment πŸ–₯

All the versions from my package.json file here:

  "dependencies": {
    "copy-webpack-plugin": "11.0.0",
    "html-webpack-plugin": "5.5.0",
    "webpack": "5.88.2",
    "webpack-cli": "4.9.2",
    "webpack-dev-server": "4.8.1"
  },
  "devDependencies": {
    "css-loader": "6.7.1",
    "html-loader": "4.2.0",
    "style-loader": "3.3.1"
  }

Also, the output of the above commands here:

node -e "var os=require('os');console.log('Node.js ' + process.version + '\n' + os.platform() + ' ' + os.release())"
Node.js v18.16.0
darwin 22.6.0
npm --version
9.5.1
npm ls webpack
html-webpack-plugin-18n-generator@1.0.0 /Users/einazare/Desktop/html-webpack-plugin-18n-generator
β”œβ”€β”¬ copy-webpack-plugin@11.0.0
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ css-loader@6.7.1
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ html-loader@4.2.0
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ html-webpack-plugin@5.5.0
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ style-loader@3.3.1
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ webpack-cli@4.9.2
β”‚ β”œβ”€β”¬ @webpack-cli/configtest@1.2.0
β”‚ β”‚ └── webpack@5.88.2 deduped
β”‚ └── webpack@5.88.2 deduped
β”œβ”€β”¬ webpack-dev-server@4.8.1
β”‚ β”œβ”€β”¬ webpack-dev-middleware@5.3.3
β”‚ β”‚ └── webpack@5.88.2 deduped
β”‚ └── webpack@5.88.2 deduped
└─┬ webpack@5.88.2
  └─┬ terser-webpack-plugin@5.3.9
    └── webpack@5.88.2 deduped
npm ls html-webpack-plugin
html-webpack-plugin-18n-generator@1.0.0 /Users/einazare/Desktop/html-webpack-plugin-18n-generator
└── html-webpack-plugin@5.5.0

Thank you πŸ™

einazare commented 1 year ago

I've managed to partially solve the issue by removing from my webpack.config.js the following code:

        {
          test: /\.html$/,
          use: ["html-loader"]
        },

But the <%= title %> from my .js file is still not being replaced with the templateParameter.

Also, another issue, is that, if I remove the rule for html-loader the favicon is not bundled anymore 😒 .

KaranLala commented 10 months ago

I just faced this same issue. Looking at the link below, it says "However this also means that in the following example webpack will use the html loader for your template. This will cause html minification and it will also disable the ejs/lodash fallback loader."

So I would assume that the ejs/lodash loader is required to set the templateParameters? Which explains why disabling the html-loader is working in your case. To bundle the favicon, you can use the favicon option in html-webpack-plugin?

https://github.com/jantimon/html-webpack-plugin/blob/main/docs/template-option.md

Edit:

There seems to be a way to run both html-loader and ejs loader if needed: https://stackoverflow.com/questions/56726509/webpack-chaining-loaders/61795641#61795641