Writing Your Own Templates section does not work
einazare opened this issue ยท 2 comments
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:
- Here: https://github.com/jantimon/html-webpack-plugin#writing-your-own-templates
- And here: https://github.com/jantimon/html-webpack-plugin/tree/main/examples/template-parameters
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:
- Install the dependencies with
npm install
- Build the application with
npm run build
- Open
dist/index.html
- You will see
<%= title %>
was not replaced bySome 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 ๐
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 ๐ข .
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