Прежде всего, вы должны различать classi c SPA с Vue / React и stati c HTML с Vue / React. SPA рендерится на стороне клиента, это означает, что есть более или менее пустой HTML, и все будет отображаться JavaScript, поэтому нет причин писать простой HTML.
Но вы можете использовать HTML Engine, например Twig / Nunjucks, с html-webpack-plugin
и шаблоном. Вы можете узнать это из https://darvin.dev
, это HTML Boilerplate Webpack.
const prod = {
module: {
rules: [{
test: /\.njk$/,
use: [{
loader: 'simple-nunjucks-loader',
options: {
searchPaths: [
`${ROOT_PATH}/${global.inputDirs.src}/${global.inputDirs.templates}/`,
],
assetsPaths: [
`${ROOT_PATH}/${global.inputDirs.src}/${global.inputDirs.assets}/`,
],
filters: {
sizes: `${ROOT_PATH}/webpack/settings/html-njk/config/nunjucks.filters.size.js`,
},
globals: {
darvinEnv: `${ROOT_PATH}/webpack/settings/html-njk/config/nunjucks.global.js`,
}
}
}]
}]
},
plugins: [
// loop here for each html file
new HtmlWebpackPlugin({
filename: targetPath + `.html`,
template: `${global.inputDirs.src}/${global.inputDirs.templates}/${targetPath}.${global.template.extIn}`,
hash: true,
inject: `body`,
cache: true,
chunks: [elementObj.chunkName],
templateParameters: {
darvin: elementObj,
sprite: allIconsInDir
},
minify: {
collapseWhitespace: false,
conservativeCollapse: false,
removeComments: false,
removeRedundantAttributes: false,
removeScriptTypeAttributes: false,
removeStyleLinkTypeAttributes: false,
useShortDoctype: false,
removeAttributeQuotes: false,
removeEmptyAttributes: false,
removeEmptyElements: false,
removeOptionalTags: false
}
});
],
};