在webpack中使用html partials

lskq00tm  于 2023-11-19  发布在  Webpack
关注(0)|答案(1)|浏览(152)

我在JS和webpack方面是个新手,我正在尝试在我的项目中使用partials作为页眉和页脚,以免到处重复。
我的第一个方法是安装html-loader并在index.html中使用:

  1. <%= require('html-loader!./assets/html/header.html') %>

字符串
它是工作的,只有当我不添加任何规则的html文件在webpack配置(我想如果我这样做,它干扰与HtmlWebpackPlugin),但是,我的页面呈现:

  1. [object Module]


我在网上找不到任何好的解释(与html文件案例有关)。
我有一个很好的方法,或者有另一种更简单的方法来做到这一点?我将包括这些分部无处不在,但我不排除创建分部的东西,我想在特定的页面中使用。

vlju58qv

vlju58qv1#

更简单的方法是使用html-webpack-plugin。这个插件支持许多模板引擎(Eta,EJS,Handlebars,Nunjucks,LiquidJS)“开箱即用”。默认的模板引擎是最快的Eta(类似EJS)。
简单的用法,干净的语法,例如,./src/views/index.html

  1. <html>
  2. <head>
  3. <!-- specify a source style file, relative to html file -->
  4. <link href="../scss/styles.scss" rel="stylesheet" />
  5. <!-- specify a source script file, relative to html file -->
  6. <script src="../js/main.js" defer="defer"></script>
  7. </head>
  8. <body>
  9. <!-- specify a source partial file, relative to project path -->
  10. <%~ include('/src/views/header.html') %>
  11. <h1>Hello World!</h1>
  12. <!-- specify a source image file, relative to html file -->
  13. <img src="../images/picture.png" />
  14. <!-- specify a source partial file, relative to project path -->
  15. <%~ include('/src/views/footer.html') %>
  16. </body>
  17. </html>

字符串
最小的Webpack配置:

  1. const HtmlBundlerPlugin = require('html-bundler-webpack-plugin');
  2. module.exports = {
  3. plugins: [
  4. new HtmlBundlerPlugin({
  5. entry: {
  6. // define templates here
  7. index: './src/views/index.html', // => dist/index.html
  8. },
  9. }),
  10. ],
  11. module: {
  12. rules: [
  13. {
  14. test: /\.(css|sass|scss)$/,
  15. use: ['css-loader', 'sass-loader'],
  16. },
  17. {
  18. test: /\.(ico|png|jp?g|webp|svg)$/,
  19. type: 'asset/resource',
  20. generator: {
  21. filename: 'img/[name].[hash:8][ext]',
  22. },
  23. },
  24. ],
  25. },
  26. };

注意入口是一个HTML文件,所有的源脚本和样式文件都应该直接在HTML中指定,插件会解析HTML模板中的所有源文件,并在生成的HTML中将引用替换为它们的输出文件名。

不需要额外的插件和加载器。

展开查看全部

相关问题