在Webpack中用url-loader处理图片和字体的问题

yizhihongxing

在Webpack中使用url-loader处理图片和字体文件,可以方便地将这些文件打包到生成的最终bundle文件中,从而加快页面的加载速度。下面是一份完整的攻略,包括安装必要的loader、配置Webpack以及两个例子。

安装必要的loader

首先,为了使用url-loader,我们需要安装它。可以使用npm或者yarn。

使用npm:

npm install url-loader file-loader --save-dev

使用yarn:

yarn add url-loader file-loader --dev

其中,file-loader是url-loader的依赖,我们也需要进行安装。

配置Webpack

接下来,需要在Webpack的配置文件中进行配置,以便正确地处理图片和字体文件。主要涉及到两个配置项:module.rulesoutput.publicPath

配置module.rules

我们需要在Webpack的配置文件中添加module.rules规则来指定要调用url-loader的文件类型和处理方法。主要需要注意的是,file-loader也需要添加进来,以便可以一起使用。

以下是一份示例配置:

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'images/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'fonts/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'file-loader',
        options: {
          name: 'images/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'file-loader',
        options: {
          name: 'fonts/[name].[hash:7].[ext]'
        }
      }
    ]
  },
  output: {
    publicPath: '/'
  }
};

在上面的示例中,我们指定了处理.png.jpg.jpeg.gif.svg格式的图片文件,以及.woff.woff2.eot.ttf.otf格式的字体文件。其中,文件大小小于10KB的会转成base64编码,保存在JS文件中,文件大小大于10KB的则会放到指定的文件夹下。

配置output.publicPath

配置output.publicPath可以让Webpack在解析依赖关系时自动将图片文件和字体文件的引用路径改为相对路径。可以将publicPath设置为服务器根路径'/',这样在浏览器中加载时不会出现404错误。以下是一个示例:

module.exports = {
  // ...其他配置...
  output: {
    publicPath: '/'
  }
};

示例1:处理图片

在我们的HTML代码中添加一张图片,如下所示:

<img src="img/example.png" alt="示例图片">

我们的项目文件和目录结构如下所示:

- src
  - img
    - example.png
  - index.js
- index.html
- webpack.config.js

在开发环境下,执行Webpack打包后,Webpack将所有文件打包到dist目录中。图片文件也会被打包到dist目录下的img/文件夹中,但不会被正确的解析URL。

我们需要使用url-loader和file-loader来处理图片文件,以便能够正确地解析URL。我们打开Webpack的配置文件,添加以下规则:

{
  test: /\.(png|jpg|gif|svg)$/,
  loader: 'url-loader',
  options: {
    limit: 8192,        // 单位是Byte,太小的图片会被编码成base64编码的Data URL,减少http请求(最小值不应少于4KB哟),而太大的图片将使用file-loader处理
    name: '[path][name].[ext]'  // 存储到img文件夹下,保留目录结构
  }
}

这里我们对.png.jpg.gif.svg格式的图片文件进行处理,设定limit的大小为8192,表示图片文件大小超过8KB的图片文件将被使用file-loader处理,小于等于8KB的则会使用data:URL编码成base64字符串。name选项是将图片文件存储到img/文件夹下,并保留源文件中的路径。

现在我们再次打包,Webpack将会处理并编译所有的图片文件(限制大小的文件以及大于限制大小的文件均被处理),并在编译后的HTML代码中添加正确的路径引用,如下所示:

<img src="/img/example.f1a5b30.png" alt="示例图片">

现在图片文件已经正确地解析URL,可以正确地显示在HTML页面中。

示例2:处理字体

处理字体文件的过程和处理图片类似。我们需要首先将字体文件以file-loader的方式进行处理,然后使用url-loader将其转为data:URL格式以便在CSS中引用。

我们在CSS文件中添加以下代码:

@font-face {
  font-family: 'MyFont';
  src: url('../fonts/MyFont.woff2') format('woff2'),
       url('../fonts/MyFont.woff') format('woff');
  font-weight: normal;
  font-style: normal;
}

我们的目录结构如下所示:

- src
  - css
    - style.css
  - fonts
    - MyFont.woff2
    - MyFont.woff
  - index.js
- index.html
- webpack.config.js

我们在Webpack的配置文件中添加如下规则:

{
  test: /\.(woff|woff2|eot|ttf|otf)$/,
  exclude: /node_modules/,
  loader: 'url-loader',
  options: {
    name: '[path][name].[ext]',   // 存储到fonts文件夹下
    limit: 8192    // 大小超过这个限制将被识别成文件而不是base64数据
  }
}

这里我们对.woff.woff2.eot.ttf.otf格式的字体文件进行处理。我们将limit的值设置为8192,表示字体文件大小超过8KB的将被处理成文件而不是base64数据。name选项用于指定输出的路径和文件名。

现在我们再次打包,字体文件将被正确地处理成文件,同时在CSS文件中按正确的方式引用,以便在Webpack编译后的页面中正确地显示字体。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Webpack中用url-loader处理图片和字体的问题 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 如何在Vue项目中添加接口监听遮罩

    在Vue项目中,可以使用Vue的全局事件总线和axios拦截器配合使用,实现添加接口监听遮罩的效果。 以下是具体的步骤: 第一步:创建全局事件总线 在Vue项目的入口文件(例如main.js)中,创建全局事件总线: import Vue from ‘vue’ const EventBus = new Vue() export default EventBus…

    JavaScript 2023年6月11日
    00
  • 如何在JavaScript中等分数组的实现

    要在JavaScript中实现将一个数组等分成n个子数组的过程,可以按照以下步骤进行: 设置一个函数,用于等分数组 首先,我们需要设置一个函数,用于将原始数组等分成n个子数组。该函数可以设置两个参数,分别是原始数组和要分成的子数组的个数。 function splitArrayIntoChunks(array, chunks) { // 在此处添加代码 } …

    JavaScript 2023年5月27日
    00
  • js Object2String方便查看js对象内容

    这里是关于如何使用 JavaScript 的 Object2String 来方便查看 JavaScript 对象内容的详细攻略: 安装: Object2String 是当下比较常用的一个 npm 模块,并且可以通过命令行快速安装: npm install obj2str 用法: 在代码中,我们可以使用 require 或者 import 的方式引入 obj2…

    JavaScript 2023年5月27日
    00
  • JavaScript Sort 表格排序

    JavaScript Sort 表格排序攻略 JavaScript Sort 表格排序是一种常见的数据排序技术,它使用JavaScript代码对HTML表格中的数据进行排序。该技术非常实用,能够帮助用户更方便快捷地查看表格中的数据。 实现步骤 下面是实现JavaScript Sort 表格排序的步骤: 在表格中为每列添加一个点击事件。当用户点击表头中的某一列…

    JavaScript 2023年6月11日
    00
  • 在JavaScript中查找字符串中最长单词的三种方法(推荐)

    让我们来详细讲解在JavaScript中查找字符串中最长单词的三种方法。 方法一:使用split()和sort()函数 该方法通过使用split()函数将字符串转换为数组,并使用sort()函数对数组进行排序,然后找到数组中最长的单词来查找最长单词。 function findLongestWord(str) { let words = str.split(…

    JavaScript 2023年5月28日
    00
  • js计算两个时间之间天数差的实例代码

    计算两个时间之间天数差的实例代码,具体流程如下: 1. 确定时间格式 在编写代码之前需要先确定所输入的时间格式是否固定,因为不同的时间格式需要使用不同的方法来处理。比如,常见的日期格式有yyyy-MM-dd、yyyy/MM/dd、MM/dd/yyyy等等。 2. 解析时间字符串 在解析时间字符串之前,需要先将时间字符串转换成时间戳。JavaScript提供了…

    JavaScript 2023年5月27日
    00
  • Javascript判断图片尺寸大小实例分析

    下面我们来详细讲解一下“Javascript判断图片尺寸大小实例分析”的完整攻略。 前言 在网页中,我们经常会用到图片。而有些时候,为了网页的美观和用户的体验,我们需要对图片的尺寸大小进行限制。如果图片过大,可能会导致网页加载过慢,影响用户的使用体验。那么如何利用JavaScript判断图片尺寸大小呢?下面我们将详细讲解。 确定图片尺寸的方法 JavaScr…

    JavaScript 2023年6月11日
    00
  • 用js的document.write输出的广告无阻塞加载的方法

    使用 JavaScript 的 document.write 输出广告可以实现无阻塞加载的效果,因为在文档加载过程中,浏览器会优先渲染 HTML 和 CSS,而 JavaScript 代码是在页面内容加载完毕后才执行。因此,使用 document.write 的方式来输出广告,可以保证广告内容不会影响页面原有的渲染效果,而且不会阻塞页面的加载过程。 为了进一…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部