webpack踩坑之路图片的路径与打包

webpack踩坑之路图片的路径与打包

在使用webpack进行项目开发时,难免会遇到图片资源的问题,主要问题集中在图片路径的设置和图片打包。

图片路径的设置

相对路径和绝对路径

在HTML中,图片的路径一般有相对路径和绝对路径两种方式。

  • 相对路径:相对路径是指当前文件所在目录到目标文件的路径。比如:./favicon.ico就代表当前文件夹里的 favicon.ico 文件;../images/test.png就代表上一层文件夹的 images/test.png 文件。

  • 绝对路径:绝对路径是指从文件系统根目录到目标文件的路径。比如:file://C:/User/xxx/images/test.png

在webpack中,相对路径的设置需要考虑两个问题:打包后的文件目录和文件引用的地方。

publicPath

在webpack配置文件中,可以通过设置output中的publicPath来设置打包后文件引用的前缀路径。如:

output: {
  publicPath: 'http://cdn.example.com/assets/',
  // ...
}

这里将publicPath设置为http://cdn.example.com/assets/,则在HTML中引用图片时,会自动添加该前缀,如:

<img src="http://cdn.example.com/assets/images/test.png" />

加载器

除了publicPath之外,还可通过配置图片的加载器,解决图片路径的问题。常用的图片加载器有:

  • file-loader:将文件拷贝到输出目录,并且返回相对路径,可用于处理任意文件类型;
  • url-loader:与file-loader类似,但可根据图片大小选择base64编码或拷贝文件;
  • img-loader:压缩图片;

示例:

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|jpeg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192, // 小于等于8KB则打成base64编码的格式,否则使用file-loader打包
              name: '[name].[ext]',
              outputPath: 'images/',
              publicPath: '/images/',
            },
          },
        ],
      },
    ],
  },
}

在代码中使用以下语法引用图片:

import myImage from './my-image.png';

function component() {
  const element = document.createElement('div');

  // 将图像添加到我们现有的 div。
  const myIcon = new Image();
  myIcon.src = myImage;

  element.appendChild(myIcon);

  return element;
}

图片的打包

图片的打包与路径不同,更多的是针对图片的格式、大小、质量等优化问题。

在webpack中,我们可借助image-webpack-loader和html-loader来实现图片的压缩和打包。

  • image-webpack-loader:压缩图片,减小图片大小,提高页面访问速度;
  • html-loader:处理HTML中的图片引用。

示例:

module.exports = {
  module: {
    rules: [
      // 处理HTML中的图片
      {
        test: /\.html$/,
        use: [
          {
            loader: 'html-loader',
            options: {
              attrs: ['img:src', 'img:data-src', 'audio:src'],
            },
          },
        ],
      },
      // 压缩图片
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        use: [
          {
            loader: 'image-webpack-loader',
            options: {
              mozjpeg: {
                progressive: true,
                quality: 65,
              },
              optipng: {
                enabled: false,
              },
              pngquant: {
                quality: [0.65, 0.9],
                speed: 4,
              },
              gifsicle: {
                interlaced: false,
              },
              webp: {
                quality: 75,
              },
            },
          },
        ],
      },
    ],
  },
}

总结:

图片的路径与打包在webpack中是比较重要的问题,需要结合相对路径和绝对路径的方式来设置路径,通过publicPath和加载器来实现;对于打包问题,我们可通过image-webpack-loader和html-loader来实现图片的压缩和打包。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:webpack踩坑之路图片的路径与打包 - Python技术站

(1)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • CSS清除浮动大全共8种方法

    下面详细讲解一下“CSS清除浮动大全共8种方法”的完整攻略。 1. 什么是浮动 在HTML中,浮动是一种常见的布局方式,可以使元素向左或向右“浮动”,从而腾出空间让其他元素排列。 2. 为什么要清除浮动 当浮动元素的高度发生改变时,会影响其他元素的位置,使得页面布局混乱。为了避免这种情况,我们需要清除浮动。 3. CSS清除浮动的8种方法 3.1. 父级di…

    css 2023年6月10日
    00
  • 在IE8上JS实现combobox支持拼音检索功能

    实现在IE8上JS实现combobox支持拼音检索功能的完整攻略,需要遵循以下步骤: 引入pinyin.js pinyin.js是一个基于汉字转拼音的JavaScript库,可以通过引入该库为我们提供方便的汉字拼音转换功能。可以在中引入该js库: <head> <script src="path/to/pinyin.js&quot…

    css 2023年6月10日
    00
  • IE=edge,chrome=1的META信息详解

    Sure! IE=edge,chrome=1的META信息详解 背景 在编写网页时,我们需要使用一些 META 标签来指示浏览器该如何渲染我们的网页。其中,IE=edge,chrome=1 是一条常见的 META 信息,在本文中,我们将详细讲解该 META 信息的含义和使用方法。 META 信息的作用 META 信息(元数据)是指对一些内容的描述,可以告诉搜…

    css 2023年6月9日
    00
  • 使用js操作css实现js改变背景图片示例

    当我们需要动态修改页面外观时,就可以使用JavaScript来操作CSS。以下是使用JS操作CSS来实现背景图片更换的示例攻略。 步骤1:获取DOM元素 首先,在JS中获取需要更改背景图片的DOM元素,可以使用getElementById()方法,例如: const divElement = document.getElementById(‘myDiv’);…

    css 2023年6月9日
    00
  • 微信小程序 滚动选择器(时间日期)详解及实例代码

    下面就为大家详细讲解微信小程序中的滚动选择器(时间日期)的相关知识及实例代码,包括使用步骤、代码实现以及注意事项等内容。 一、滚动选择器介绍 滚动选择器在小程序中可以用来让用户从一组可选项中进行选择。它提供了一种非常方便的选择方式,不仅适用于时间日期的选择,而且也适用于其他类型的选择。 在小程序中,时间日期选择器是通过 picker 组件实现的。picker…

    css 2023年6月9日
    00
  • BootStrapValidator初使用教程详解

    BootStrapValidator初使用教程详解 什么是 Bootstrap Validator Bootstrap Validator 是一个 jQuery 插件,它为表单验证提供了强大的支持。它可以在客户端对表单进行验证,用户在提交表单之前就可以知道表单是否正确。Bootstrap Validator 可以验证所有 HTML 输入元素,包括文本输入框、…

    css 2023年6月9日
    00
  • CSS的class与id常用的命名规则

    CSS的class和id是我们在网页开发中经常需要用到的命名规则。良好的命名规范不仅可以提高代码可读性和维护性,而且对SEO优化也有很大的帮助。下面是CSS的class和id常用的命名规则的完整攻略: 一、class命名规则 1.1 使用短横线-分隔每个单词 在定义class名称时,使用短横线-来分隔每个单词,例如:header-title、nav-bar、…

    css 2023年6月9日
    00
  • CSS实现 Google Material Design 文本输入框风格(推荐)

    实现 Google Material Design 文本框风格的方法有很多种,但是本攻略将重点介绍使用 CSS 实现的方法。以下是实现过程: 步骤 1:HTML 结构 首先,我们需要定义一个基本的 HTML 结构,包含一个输入框和一个标签(label),如下所示: <div class="input-wrapper"> &lt…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部