经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
webpack4 系列教程(十一):字体文件处理
来源:cnblogs  作者:GodBMW  时间:2018/10/11 9:20:38  对本文有异议

教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步《webpack4 系列教程(十一):字体文件处理》原文地址。或者来我的小站看更多内容:godbmw.com

0. 课程介绍和资料

本节课的代码目录如下:

本节课的package.json内容如下:

  1. {
  2. "devDependencies": {
  3. "css-loader": "^1.0.0",
  4. "extract-text-webpack-plugin": "^4.0.0-beta.0",
  5. "file-loader": "^1.1.11",
  6. "style-loader": "^0.21.0",
  7. "url-loader": "^1.0.1",
  8. "webpack": "^4.16.1"
  9. }
  10. }

1. 准备字体文件和样式

如上面的代码目录所示,字体文件和样式都放在了/src/assets/fonts/目录下。点我直接下载相关文件

2. 编写入口文件

为了提取 css 样式到单独文件,需要用到ExtractTextPlugin插件。在项目的入口文件需要引入style-loadercss-loader:

  1. // app.js
  2. import "style-loader/lib/addStyles";
  3. import "css-loader/lib/css-base";
  4. import "./assets/fonts/iconfont.css";

3. 处理字体文件

借助url-loader,可以识别并且处理eotwoff等结尾的字体文件。同时,根据字体文件大小,可以灵活配置是否进行base64编码。下面的 demo 就是当文件大小小于5000B的时候,进行base64编码。

  1. // webpack.config.js
  2. const path = require("path");
  3. const ExtractTextPlugin = require("extract-text-webpack-plugin");
  4. let extractTextPlugin = new ExtractTextPlugin({
  5. filename: "[name].min.css",
  6. allChunks: false
  7. });
  8. module.exports = {
  9. entry: {
  10. app: "./src/app.js"
  11. },
  12. output: {
  13. publicPath: __dirname + "/dist/",
  14. path: path.resolve(__dirname, "dist"),
  15. filename: "[name].bundle.js",
  16. chunkFilename: "[name].chunk.js"
  17. },
  18. module: {
  19. rules: [
  20. {
  21. test: /\.css$/,
  22. use: ExtractTextPlugin.extract({
  23. fallback: {
  24. loader: "style-loader"
  25. },
  26. use: [
  27. {
  28. loader: "css-loader"
  29. }
  30. ]
  31. })
  32. },
  33. {
  34. test: /\.(eot|woff2?|ttf|svg)$/,
  35. use: [
  36. {
  37. loader: "url-loader",
  38. options: {
  39. name: "[name]-[hash:5].min.[ext]",
  40. limit: 5000, // fonts file size <= 5KB, use 'base64'; else, output svg file
  41. publicPath: "fonts/",
  42. outputPath: "fonts/"
  43. }
  44. }
  45. ]
  46. }
  47. ]
  48. },
  49. plugins: [extractTextPlugin]
  50. };

4. 编写index.html

按照上面的配置,打包好的cssjs均位于/src/dist/文件夹下。因此,需要在index.html中引入这两个文件(假设已经打包完毕):

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="./dist/app.min.css">
  9. </head>
  10. <body>
  11. <div id="app">
  12. <div class="box">
  13. <i class="iconfont icon-xiazai"></i>
  14. <i class="iconfont icon-shoucang"></i>
  15. <i class="iconfont icon-erweima"></i>
  16. <i class="iconfont icon-xiangshang"></i>
  17. <i class="iconfont icon-qiehuanzuhu"></i>
  18. <i class="iconfont icon-sort"></i>
  19. <i class="iconfont icon-yonghu"></i>
  20. </div>
  21. </div>
  22. <script src="./dist/app.bundle.js"></script>
  23. </body>
  24. </html>

5. 结果分析和验证

CMD中运行webpack进行打包,打包结果如下:

在 Chrome 中打开index.html,字体文件被正确引入:

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号