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

yizhihongxing

浅谈 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日

相关文章

  • 如何使用50行javaScript代码实现简单版的call,apply,bind

    下面是如何使用50行JavaScript代码实现简单版的call, apply, bind的完整攻略。 步骤 首先,我们需要一个函数作为示例,以便于演示call, apply, bind的使用。我们用一个简单的计算器函数,实现加法和乘法,代码如下: function Calculator() { this.add = function(num1, num2)…

    JavaScript 2023年6月11日
    00
  • javascript 在线文本编辑器实现代码

    实现一个 JavaScript 在线文本编辑器的具体思路如下: 创建一个文本输入框,接受用户输入的文本; 创建一个可编辑的文本区域,将用户输入的文本显示在此区域内; 设置文本区域的样式和属性,使之可编辑; 当用户在文本区域中进行编辑操作时,通过 JavaScript 监听用户的输入操作,并实时更新显示内容; 将编辑后的文本内容提交到后台进行保存。 下面是实现…

    JavaScript 2023年6月10日
    00
  • js中bool值的转换及“&&”、“||”、 “!!”详解

    bool是布尔类型,只有两种取值:true和false。在JavaScript中,存在一些将非布尔值转换为布尔值的规则,这些规则叫做隐式类型转换。而“&&”、“||”、 “!!”都是实现js中布尔值转换的常用操作符。 “&&”操作符 当使用“&&”操作符时,如果两个值都是true,则返回true;否则返回fal…

    JavaScript 2023年5月28日
    00
  • 用js+cookie记录滚动条位置

    下面我将为您详细介绍用JS+Cookie记录滚动条位置的完整攻略。 1. Cookie简介 Cookie 是一种在浏览器存储数据的小文件。Cookie 可以用于会话管理、个性化设置、购物车、广告跟踪等方面。 Cookie 是通过 JavaScript 中的 document.cookie 属性进行访问和修改,可以存储少量的数据,通常不超过 4 KB。每个 C…

    JavaScript 2023年6月11日
    00
  • 微信小程序-详解微信登陆、微信支付、模板消息

    微信小程序-详解微信登陆、微信支付、模板消息 本攻略将详细介绍微信小程序中微信登陆、微信支付、模板消息的使用方法。 微信登陆 微信登陆可用于用户授权登陆、获取用户信息。 1. 微信开放平台配置 在微信开放平台中,配置小程序的“登陆授权”和“网页授权”,并获取小程序appid、appsecret。 2. 小程序配置 在小程序中,使用wx.login获取临时登录…

    JavaScript 2023年6月10日
    00
  • JS基于正则实现数字千分位用逗号分隔的方法

    下面是JS基于正则实现数字千分位用逗号分隔的方法的完整攻略。 什么是数字千分位? 在很多情况下,我们需要将数字的千位用逗号分隔,比如说 1000,我们需要显示为 1,000,这样更易于辨认和阅读。 实现方法 在 JavaScript 中,可以使用正则表达式来实现数字千分位的处理。以下是具体实现步骤: 步骤一:将数字转换为字符串 首先,我们要将需要处理的数字转…

    JavaScript 2023年5月28日
    00
  • js将long日期格式转换为标准日期格式实现思路

    将long日期格式转换为标准日期格式,可以按照以下步骤进行操作: 获取long日期值 首先,我们需要获取包含long日期值的变量,可以是从数据库中查询到的时间戳,或者是前端传递过来的时间戳等。 示例1:获取当前时间戳 var timestamp = Date.now(); 示例2:获取后端传递过来的时间戳 var timestamp = response.d…

    JavaScript 2023年6月10日
    00
  • JavaScript window.location对象

    JavaScript中的window.location对象用于获取或设置浏览器当前打开页面的URL地址信息,它包含了当前页面的所有信息,如:协议、主机名、路径、查询字符串等等。接下来我们将详细讲述该对象的使用。 获取当前页面信息 我们可以使用window.location对象来获取当前页面的相关信息,如下所示: // 获取当前页面的协议,如:http、htt…

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