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

相关文章

  • JS实现点击颜色块切换指定区域背景颜色的方法

    针对“JS实现点击颜色块切换指定区域背景颜色”的情况,可以考虑以下实现方案。 实现思路 定义颜色块选项和给定区域(例如div); 给颜色块添加点击事件,记录点击的颜色值; 利用DOM操作,将颜色值赋予给定区域的背景色; 代码示例 <!doctype html> <html> <head> <meta charset=…

    JavaScript 2023年6月11日
    00
  • 关于js new Date() 出现NaN 的分析

    关于 JS 中 new Date() 返回 NaN 的情况,一般有以下几个原因: 1. 传递给 Date() 函数的字符串格式不正确 如果传递给 Date() 函数的字符串格式不正确,那么直接调用 new Date() 后会返回 Invalid Date,即不合法的日期对象,而在进行一些操作时会得到 NaN 的结果。 例如: var date = new D…

    JavaScript 2023年6月10日
    00
  • JavaScript起点(严格模式深度了解)

    JavaScript起点(严格模式深度了解) 什么是严格模式? 严格模式是 ECMAScript 5 引入的一种运行模式,主要作用是弥补了 JavaScript 语言本身一些缺陷,提高了代码的运行效率,增强了安全性。通过开启严格模式,可以使 JavaScript 代码更加规范、更加安全、更加高效。 开启严格模式有两种方式: 在全局环境中使用 ‘use str…

    JavaScript 2023年5月19日
    00
  • 论JavaScript模块化编程

    论JavaScript模块化编程 JavaScript的模块化编程是指将一个大型的应用程序划分为小的、互相依赖的模块,每个模块具有特定的功能,实现模块的高内聚、低耦合的特性,方便代码的维护和复用。本文将介绍如何使用JavaScript进行模块化编程,并分别通过常规模块化和ES6模块化两个实例进行说明。 常规模块化 常规模块化是JavaScript模块化的老方…

    JavaScript 2023年5月27日
    00
  • Javascript中数组去重与拍平的方法示例

    下面我会对 “Javascript中数组去重与拍平的方法示例” 进行详细讲解。 一、去重方法 Javascript中实现数组去重有多种方法,这里介绍两种常用方法。 1. Set去重法 Set是ES6中新增的数据结构,它可以实现快速的去重操作。我们可以用Set将数组转换为一个不包含重复值的集合,最后再将集合转回数组即可。 下面是具体的示例代码: 首先,定义一个…

    JavaScript 2023年5月27日
    00
  • JS动画效果打开、关闭层的实现方法

    JS动画效果打开、关闭层的实现方法可以通过以下步骤来完成: 准备HTML、CSS和JS代码 首先,需要准备好HTML页面和相应的CSS样式。创建一个HTML页面,在其上添加一个按钮或其他元素, 用于打开和关闭层。 <!DOCTYPE html> <html> <head> <title>JS动画效果打开、关闭层…

    JavaScript 2023年6月10日
    00
  • JavaScript中颜色模型的基础知识与应用详解

    JavaScript中颜色模型的基础知识与应用详解 一、颜色模型基础知识 1. RGB 颜色模型 RGB是一种颜色模型,RGB分别代表红色、绿色、蓝色三个颜色通道。在 RGB 颜色模型中,每个颜色通道的取值范围在 0-255 之间。可以通过拼接不同的 RGB 值来得到不同的颜色,如 rgb(255, 0, 0) 表示红色。 在 JavaScript 中,可以…

    JavaScript 2023年5月28日
    00
  • JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8

    这个错误提示通常是由于 HTML 文件中的字符编码指定错误导致的。下面是一些可能的原因和解决方案: 编码不匹配:HTML 文件头部的 charset 设置与 JavaScript 文件头部的 charset 不一致。如果 HTML 文件是以 UTF-8 编码保存的,而 JavaScript 文件是以 GB2312 编码保存的,则在运行 JavaScript …

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