【问题标题】:How to load assets from .pug template with html-webpack-plugin如何使用 html-webpack-plugin 从 .pug 模板加载资产
【发布时间】:2023-03-19 18:23:02
【问题描述】:

我正在学习 CSS 课程,已经厌倦了手动输入类似的 HTML 结构,所以我连接了 pug 模板和 webpack-dev-server 来提供它。

注意:我的入口点是 .scss 文件而不是 .js

我有两个问题:

a) 只有来自 css 的资源会被加载到 build 文件夹,但 .pug 模板中的 src 属性中引用的图像和 svg 会被忽略。

b) 浏览器重新加载在webpack-dev-server 中不起作用

我的webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  entry: './sass/main.scss',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'css/style.css',
  },
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.pug$/,
        use: ['pug-loader'],
      },
      {
        test: /\.(css|sass|scss)$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: [
            {
              loader: 'css-loader',
            },
            {
              loader: 'postcss-loader',
            },
            {
              loader: 'sass-loader',
            },
          ]
        })
      },
      {
        test: /\.(gif|png|jpe?g|svg)$/i,
        use: [
          // {
          //   loader: 'file-loader',
          //   options: {
          //     name: 'img/[name].[ext]',
          //   }
          // },
          {
            loader: 'url-loader',
            options: {
              limit: 10000,
              publicPath: "../",
              name: 'img/[name].[ext]',
            }
          }
        ],
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './test.pug',
      filename: 'index.html',
      favicon: 'img/favicon.png',
      cache: false,
    }),
    new ExtractTextPlugin('css/style.css'),
  ],
  devServer: {
    contentBase: path.join(__dirname, 'build'),
    compress: true,
    open: 'firefox',
    port: 8080,
    hot: true,
  },
};

请指教。

【问题讨论】:

    标签: webpack sass html-webpack-plugin pug-loader


    【解决方案1】:

    似乎这个话题对任何人都不感兴趣,但我找到了解决方案,这里是:

    a) 为了触发 webpack 将您的资产从 .pug 模板包含到依赖图中,需要它们:

    img(
        alt="Your image"
        src=require("./img/image.jpg")
    )
    

    但是,如果您从单个 sprite 访问所有 SVG,您就不能对 SVG 做同样的事情。因为:

    svg
       use(xlink:href=require("./img/sprite.svg#icon"))
    

    会抛出异常,提示找不到该名称的文件。

    所以我所做的就是要求模板开头的整个精灵 require("./img/sprite.svg") 然后以通常的方式指定图标:

    svg
       use(xlink:href="./img/sprite.svg#icon")
    

    b) 至于重载问题,没那么容易。我玩过MiniCssExtractPlugin 选项,但仍然无法重新加载。所以我最终从this gistthis repo 那里得到了想法。不得不稍微改变我的项目结构并创建index.js 作为入口点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 2018-03-23
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2015-12-21
      • 2016-05-21
      • 2023-03-13
      相关资源
      最近更新 更多