首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用html-webpack-plugin从.pug模板加载资产

如何用html-webpack-plugin从.pug模板加载资产
EN

Stack Overflow用户
提问于 2019-04-26 06:21:50
回答 1查看 1.7K关注 0票数 1

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

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

我有两个问题:

( a)只有来自css的资产被加载到构建文件夹中,但是.pug模板中的.pug属性中引用的图像和svg被忽略了。

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

我的webpack.config.js

代码语言:javascript
复制
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,
  },
};

请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2019-05-29 17:41:15

似乎这个话题对任何人都不感兴趣,但我找到了解决办法,如下所示:

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

代码语言:javascript
复制
img(
    alt="Your image"
    src=require("./img/image.jpg")
)

但是,如果您从单个sprite访问所有SVG,则不能对SVG进行同样的操作。因为:

代码语言:javascript
复制
svg
   use(xlink:href=require("./img/sprite.svg#icon"))

会抛出和异常,说它找不到那个名字的文件。

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

代码语言:javascript
复制
svg
   use(xlink:href="./img/sprite.svg#icon")

( b)关于重新装货问题,并不是那么容易。我玩了MiniCssExtractPlugin选项,但仍然无法让它重新加载。所以我最终从这个要旨这个回购那里学到了一些想法。但是,必须更改项目的结构,并创建index.js作为入口点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55861855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档