demo12源码地址
项目目录为:
package.json 中使用的依赖如下:
{"scripts": {"dev": "webpack --mode development","build": "webpack --mode production"},"devDependencies": {"@babel/core": "^7.4.5","@babel/plugin-transform-runtime": "^7.4.4","@babel/preset-env": "^7.4.5","autoprefixer": "^9.5.1","babel-loader": "^8.0.6","clean-webpack-plugin": "^2.0.2","css-loader": "^2.1.1","html-loader": "^0.5.5","html-webpack-plugin": "^3.2.0","image-webpack-loader": "^5.0.0","lodash": "^4.17.11","mini-css-extract-plugin": "^0.7.0","node-sass": "^4.12.0","optimize-css-assets-webpack-plugin": "^5.0.1","postcss-loader": "^3.0.0","postcss-sprites": "^4.2.1","sass-loader": "^7.1.0","style-loader": "^0.23.1","url-loader": "^1.1.2","webpack": "^4.29.6","webpack-cli": "^3.3.2"}}
app.js中引入字体文件
import ‘./assets/fonts/iconfont.css’
配置webpack.config.js文件来处理字体
借助url-loader,可以识别并且处理eot,woff等结尾的字体文件。同时,根据字体大小,可以灵活配置是否进行base64编码。
下面的demo就是当文件大小小于5000B的时候,进行base64编码。
const path = require('path')const CleanWebpackPlugin = require('clean-webpack-plugin')const HtmlWebpackPlugin = require('html-webpack-plugin')const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将 css 单独打包成文件module.exports = {entry: {app: './src/app.js'},output: {publicPath: './', // js 引用的路径或者 CDN 地址path: path.resolve(__dirname, 'dist'), // 打包文件的输出目录filename: '[name].bundle.js', // 代码打包后的文件名chunkFilename: '[name].js' // 代码拆分后的文件名},module: {rules: [{test: /\.(scss|css)$/, // 针对.css后缀文件设置loader// use: ["style-loader", "css-loader"]use: [{loader: MiniCssExtractPlugin.loader},"css-loader",//"postcss-loader", // 使用 postcss 为 css 加上浏览器前缀{loader: "postcss-loader",options: {ident: "postcss",plugins: [require("postcss-sprites")(spritesConfig)]}},"sass-loader" // 使用 sass-loader 将 scss 转为 css]},{test: /\.(eot|woff2?|ttf|svg)$/,use: [{loader: 'url-loader',options: {name: '[name]-[hash:5].min.[ext]',limit: 5000, // fonts file size <= 5KB, use 'base64'; else, output svg filepublicPath: 'fonts/',outputPath: 'fonts/'}}]},{test: /\.(png|jpg|jpeg|gif)$/,use: [{loader: "url-loader",options: {name: "[name]-[hash:5].min.[ext]",outputPath: "images/", //输出到 images 文件夹limit: 10000 //把小于 20kb 的文件转成 Base64 的格式}},{loader: "image-webpack-loader",options: {// 压缩 jpg/jpeg 图片mozjpeg: {progressive: true,quality: 65 // 压缩率},// 压缩 png 图片pngquant: {quality: "65-90",speed: 4}}}]}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({// 打包输出HTMLtitle: '自动生成 HTML',minify: {// 压缩 HTML 文件removeComments: true, // 移除 HTML 中的注释collapseWhitespace: true, // 删除空白符与换行符minifyCSS: true // 压缩内联 css},filename: 'index.html', // 生成后的文件名template: 'index.html', // 根据此模版生成 HTML 文件chunks: ['app'] // entry中的 app 入口才会被打包}),new MiniCssExtractPlugin({filename: '[name].css',chunkFilename: '[id].css'})]}
在index.html中使用字体
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>处理字体文件</title></head><body><div id="app"><div class="box"><i class="iconfont icon-yanjing"></i><i class="iconfont icon-yanjing1"></i><i class="iconfont icon-yanjing2"></i><i class="iconfont icon-yanjing3"></i></div></div></body></html>
打包后查看index.html文件,打包成功。
