# 处理字体图标资源 ## 1. 下载字体图标文件 1. 打开[阿里巴巴矢量图标库](https://www.iconfont.cn/) 2. 选择想要的图标添加到购物车,统一下载到本地 ## 2. 添加字体图标资源 - src/fonts/iconfont.ttf - src/fonts/iconfont.woff - src/fonts/iconfont.woff2 - src/css/iconfont.css - 注意字体文件路径需要修改 - src/main.js ```js{5} 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 ```html{16-19} webpack5

Hello Webpack5

``` ## 3. 配置 ```js{47-53} 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"`的区别: 1. `type: "asset/resource"` 相当于`file-loader`, 将文件转化成 Webpack 能识别的资源,其他不做处理 2. `type: "asset"` 相当于`url-loader`, 将文件转化成 Webpack 能识别的资源,同时小于某个大小的资源会处理成 data URI 形式 ## 4. 运行指令 ```:no-line-numbers npx webpack ``` 打开 index.html 页面查看效果