Webpack5入门到原理9:处理字体图标资源

1. 下载字体图标文件

  • 打开阿里巴巴矢量图标库
  • 选择想要的图标添加到购物车,统一下载到本地

2. 添加字体图标资源

  • src/fonts/iconfont.ttf
  • src/fonts/iconfont.woff
  • src/fonts/iconfont.woff2
  • src/css/iconfont.css/注意字体文件路径需要修改

src/main.js

复制代码
import { add } from "./math";
import count from "./js/count";
import sum from "./js/sum";
// 引入资源,Webpack才会对其打包
import "./css/iconfont.css";
import "./css/index.css";
import "./less/index.less";
import "./sass/index.sass";
import "./sass/index.scss";
import "./styl/index.styl";

console.log(count(2, 1));
console.log(sum(1, 2, 3, 4));

public/index.html

复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>webpack5</title>
  </head>
  <body>
    <h1>Hello Webpack5</h1>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="box4"></div>
    <div class="box5"></div>
    <!-- 使用字体图标 -->
    <i class="iconfont icon-arrow-down"></i>
    <i class="iconfont icon-ashbin"></i>
    <i class="iconfont icon-browse"></i>
    <script src="../dist/static/js/main.js"></script>
  </body>
</html>

3. 配置

复制代码
const path = require("path");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "static/js/main.js", // 将 js 文件输出到 static/js 目录中
    clean: true, // 自动将上次打包目录资源清空
  },
  module: {
    rules: [
      {
        // 用来匹配 .css 结尾的文件
        test: /\.css$/,
        // use 数组里面 Loader 执行顺序是从右到左
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.less$/,
        use: ["style-loader", "css-loader", "less-loader"],
      },
      {
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
        test: /\.styl$/,
        use: ["style-loader", "css-loader", "stylus-loader"],
      },
      {
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024, // 小于10kb的图片会被base64处理
          },
        },
        generator: {
          // 将图片文件输出到 static/imgs 目录中
          // 将图片文件命名 [hash:8][ext][query]
          // [hash:8]: hash值取8位
          // [ext]: 使用之前的文件扩展名
          // [query]: 添加之前的query参数
          filename: "static/imgs/[hash:8][ext][query]",
        },
      },
      {
        test: /\.(ttf|woff2?)$/,
        type: "asset/resource",
        generator: {
          filename: "static/media/[hash:8][ext][query]",
        },
      },
    ],
  },
  plugins: [],
  mode: "development",
};

type: "asset/resource"和type: "asset"的区别:

type: "asset/resource" 相当于file-loader, 将文件转化成 Webpack 能识别的资源,其他不做处理

type: "asset" 相当于url-loader, 将文件转化成 Webpack 能识别的资源,同时小于某个大小的资源会处理成 data URI 形式

4. 运行指令

复制代码
npx webpack

打开 index.html 页面查看效果

相关推荐
谢尔登4 小时前
Webpack高级之常用配置项
前端·webpack·node.js
竹秋…4 小时前
webpack搭建react开发环境
前端·react.js·webpack
越努力越幸运5085 小时前
webpack的学习打包工具
前端·学习·webpack
q***718514 小时前
Webpack、Vite区别知多少?
前端·webpack·node.js
谢尔登21 小时前
简单聊聊webpack摇树的原理
运维·前端·webpack
谢尔登1 天前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
醉方休2 天前
Webpack loader 的执行机制
前端·webpack·rust
带只拖鞋去流浪3 天前
迎接2026,重新认识Vue CLI (v5.x)
前端·vue.js·webpack
小奶包他干奶奶3 天前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
小奶包他干奶奶3 天前
Webpack学习——原理理解
学习·webpack·devops