浅谈 Webpack 如何处理图片(开发、打包、优化)

浅谈 Webpack 如何处理图片(开发、打包、优化)

在Web开发中,图片作为Web页面重要的组成部分,在Webpack中如何处理图片是一个必须要掌握的技能。常见的处理方式包括以下几种:

1. 在代码中使用 import 或 require 导入图片

Webpack支持将图片(包括PNG、JPG、GIF、SVG等格式)作为模块来处理,并通过模块化的方式导入。

首先在webpack.config.js中配置url-loaderfile-loader

{
  test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  loader: 'url-loader',
  options: {
    limit: 10000, // 图片小于10kb将被转为base64编码
    name: '[name].[hash:7].[ext]' // 图片名称的规则
  }
},
{
  test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
  loader: 'url-loader',
  options: {
    limit: 10000, // 文件小于10kb将被转为base64编码
    name: '[name].[hash:7].[ext]' // 文件名称的规则
  }
},
{
  test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
  loader: 'url-loader',
  options: {
    limit: 10000, // 字体文件小于10kb将被转为base64编码
    name: '[name].[hash:7].[ext]' // 字体文件名称的规则
  }
}

然后在JS代码中import或require图片,如下所示:

import logo from './logo.png';

function createImgElement(url) {
  var img = document.createElement('img');
  img.src = url;
  document.body.appendChild(img);
}

createImgElement(logo);

在Webpack中,url-loader会自动将小于指定大小limit的图片转换为Base64编码,并返回一个data URL,可以直接作为图片资源使用。

2. 在HTML代码中使用图片

在HTML代码中使用图片,可以通过Webpack中的html-loader实现。

首先在webpack.config.js中配置html-loader,将其加入到module的规则列表中:

{
  test: /\.html$/,
  use: [
    {
      loader: 'html-loader',
      options: {
        minimize: true,
        removeComments: true,
        collapseWhitespace: true
      }
    }
  ]
}

然后在HTML代码中使用import或require导入图片,如下所示:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Webpack HTML Loader</title>
</head>

<body>
  <img src="${require('./assets/logo.png')}">
</body>

</html>

通过require导入图片的URL,Webpack会将图片移动到输出目录,并生成一个新的URL,然后使用HTML代码替换原始URL。

3. 优化图片加载

虽然在Webpack中使用url-loader将图片转换为Base64编码可以减少HTTP请求,但是对于一些大的图片或者访问较多的网站来说,这会带来性能问题。

对于这种情况,可以将图片分离出来,使用file-loader将图片输出到单独的文件,然后使用image-webpack-loader对图片进行优化,在网络带宽和加载时间之间取得平衡。

首先安装image-webpack-loader

npm install image-webpack-loader --save-dev

然后在Webpack配置文件中加入image-webpack-loader

{
  test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  use: [
    {
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: '[name].[hash:7].[ext]'
      }
    },
    {
      loader: 'image-webpack-loader',
      options: {
        mozjpeg: {
          progressive: true,
          quality: 65
        },
        optipng: {
          enabled: false,
        },
        pngquant: {
          quality: '65-90',
          speed: 4
        },
        gifsicle: {
          interlaced: false,
        },
        webp: {
          quality: 75
        }
      }
    }
  ]
}

在这里,我们使用了mozjpegpngquant等插件对图片进行了优化,可以根据实际情况选择性开启。

示例一:在代码中使用 require 导入图片

import bigImg from './assets/big.jpg';

var img = new Image();
img.src = bigImg;
document.body.appendChild(img);

在Webpack配置文件中加入对图片的处理规则,然后运行Webpack打包,此时big.jpg将会被打包到输出文件夹下。

示例二:在HTML中使用图片

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Webpack Image optimization</title>
</head>
<body>
  <img src="${require('./assets/small.jpg')}">
</body>
</html>

在Webpack配置文件中加入对HTML的处理规则,然后运行Webpack打包,此时small.jpg将会被优化,并且被复制到输出文件夹下。

通过以上两个示例,我们可以了解到Webpack在处理图片的过程中,可以在代码中使用import/require导入、在HTML中使用图片,并且通过优化插件可以对图片进行优化,提高页面性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈 Webpack 如何处理图片(开发、打包、优化) - Python技术站

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

相关文章

  • JavaScript中交换值的10种方法总结

    JavaScript中交换值的10种方法总结 为什么要交换值? 在JavaScript中,我们通常需要在不同的变量之间交换它们的值。这些变量可以是数字、字符串、布尔值等。通常情况下,我们使用一个临时变量来实现这个目的。但是,将值存储在临时变量中会使代码变得复杂,而且增加了代码的复杂性和可读性。因此,交换两个变量的值是编程中一个常见的问题。 方法一:使用临时变…

    JavaScript 2023年5月27日
    00
  • Java实战之城市多音字处理

    Java实战之城市多音字处理,可以通过以下步骤完成: 1. 构建多音字字典 首先,我们要构建一个多音字字典,将城市名中的多音字进行转换。常见的多音字有:重、长、佛、青、才等。本例中以“重庆”为例,其多音字为“重”,需进行转换。我们可以在程序中使用HashMap或者Trie树等数据结构,将多音字与其所有发音对应起来,为后续的处理做准备。 示例代码: Map&l…

    JavaScript 2023年5月28日
    00
  • js控制div弹出层实现方法

    “JS控制div弹出层实现方法”有很多种方法,以下是其中一种比较常见的方法: 1. 首先创建一个html文件,并添加CSS样式 CSS样式的作用是设置弹出层的样式和位置,实现以上功能: .popup { display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%…

    JavaScript 2023年6月11日
    00
  • jdk1.8+vue elementui实现多级菜单功能

    下面我将详细讲解“jdk1.8+vue elementui 实现多级菜单功能”的攻略。 一、准备工作 首先需要安装jdk1.8及以上版本和vue-cli的脚手架工具,具体可以参考相关官方文档。 然后需要在vue项目中安装element-ui组件库,可以使用npm命令进行安装,示例代码如下: npm install element-ui –save 在mai…

    JavaScript 2023年6月10日
    00
  • 原生JavaScript实现Ajax异步请求

    原生JavaScript实现Ajax异步请求的攻略如下: 原生JavaScript实现Ajax异步请求步骤 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); 设置请求的方法、URL以及是否为异步请求 xhr.open(‘GET’, ‘example.com/data.json’, true); 监听XMLH…

    JavaScript 2023年6月11日
    00
  • JS获取单击按钮单元格所在行的信息

    获取单元格所在行的信息一般需要以下步骤: 对表格中的按钮进行事件绑定 在事件绑定的回调函数中获取按钮所在的单元格元素td 获取单元格所在的行元素tr 根据需要获取行元素tr中的其他信息 以下是两条示例: 示例一 HTML代码: <table> <thead> <tr> <th>ID</th> &lt…

    JavaScript 2023年6月11日
    00
  • 精通JavaScript的this关键字

    如何精通 JavaScript 的 this 关键字? 了解上下文 this 关键字的值取决于函数被调用时的上下文。在 JavaScript 中,上下文默认是全局对象,但在函数中,上下文可能会被更改。为了更好地了解 this 关键字,我们需要了解上下文是如何被定义和更改的。 示例一:默认上下文是全局对象,设置 this 的方式是使用函数调用绑定。 funct…

    JavaScript 2023年6月10日
    00
  • javascript对象3个属性特征

    JavaScript中的对象是一种复合数据类型,它由属性构成。在JavaScript中,对象具有以下三个属性特征: 可枚举性(Enumerable) 可枚举性决定了对象的属性能否被 for…in 语句枚举。可枚举性的值可以是 true 或 false,默认值为 true。 示例1: const obj = {a: 1, b: 2}; Object.def…

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