教程所示圖片使用的是 github 倉庫圖片,網速過慢的朋友請移步《webpack4 系列教程(十一):字體文件處理》原文地址。或者來個人小站看更多內容:godbmw.comjavascript
本節課的代碼目錄以下:css
本節課的package.json
內容以下:html
{ "devDependencies": { "css-loader": "^1.0.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", "file-loader": "^1.1.11", "style-loader": "^0.21.0", "url-loader": "^1.0.1", "webpack": "^4.16.1" } }
如上面的代碼目錄所示,字體文件和樣式都放在了/src/assets/fonts/
目錄下。點我直接下載相關文件java
爲了提取 css 樣式到單獨文件,須要用到ExtractTextPlugin
插件。在項目的入口文件須要引入style-loader
和css-loader
:webpack
// app.js import "style-loader/lib/addStyles"; import "css-loader/lib/css-base"; import "./assets/fonts/iconfont.css";
藉助url-loader
,能夠識別而且處理eot
、woff
等結尾的字體文件。同時,根據字體文件大小,能夠靈活配置是否進行base64
編碼。下面的 demo 就是當文件大小小於5000B
的時候,進行base64
編碼。git
// webpack.config.js const path = require("path"); const ExtractTextPlugin = require("extract-text-webpack-plugin"); let extractTextPlugin = new ExtractTextPlugin({ filename: "[name].min.css", allChunks: false }); module.exports = { entry: { app: "./src/app.js" }, output: { publicPath: __dirname + "/dist/", path: path.resolve(__dirname, "dist"), filename: "[name].bundle.js", chunkFilename: "[name].chunk.js" }, module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: { loader: "style-loader" }, use: [ { loader: "css-loader" } ] }) }, { 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 file publicPath: "fonts/", outputPath: "fonts/" } } ] } ] }, plugins: [extractTextPlugin] };
index.html
按照上面的配置,打包好的css
和js
均位於/src/dist/
文件夾下。所以,須要在index.html
中引入這兩個文件(假設已經打包完畢):github
<!DOCTYPE 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>Document</title> <link rel="stylesheet" href="./dist/app.min.css"> </head> <body> <div id="app"> <div class="box"> <i class="iconfont icon-xiazai"></i> <i class="iconfont icon-shoucang"></i> <i class="iconfont icon-erweima"></i> <i class="iconfont icon-xiangshang"></i> <i class="iconfont icon-qiehuanzuhu"></i> <i class="iconfont icon-sort"></i> <i class="iconfont icon-yonghu"></i> </div> </div> <script src="./dist/app.bundle.js"></script> </body> </html>
CMD
中運行webpack
進行打包,打包結果以下:web
在 Chrome 中打開index.html
,字體文件被正確引入:json