为了账号安全,请及时绑定邮箱和手机立即绑定

webpack4 系列教程(十一):字体文件处理

标签:
webpack

本节课的代码目录如下:


webp

image

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

{  "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"
  }
}

1. 准备字体文件和样式

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

2. 编写入口文件

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

// app.jsimport "style-loader/lib/addStyles";import "css-loader/lib/css-base";import "./assets/fonts/iconfont.css";

3. 处理字体文件

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

// webpack.config.jsconst 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]
};

4. 编写index.html

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

<!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 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./dist/app.bundle.js"></script></body></html>

5. 结果分析和验证

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

webp

image

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

webp

image



作者:godbmw
链接:https://www.jianshu.com/p/45c520046a8e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消