最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vite實現(xiàn)圖片壓縮的四種有效方法

 更新時間:2025年08月27日 08:26:40   作者:前端趙哈哈  
原主流插件 vite-plugin-imagemin 已不兼容 Vite5,會導(dǎo)致構(gòu)建失敗,本文整理了 4 種適用于 Vite5 及以下版本的圖片壓縮方案,涵蓋插件化與自定義腳本,兼顧易用性與靈活性,需要的朋友可以參考下

重要提示:原主流插件 vite-plugin-imagemin 已不兼容 Vite5,會導(dǎo)致構(gòu)建失敗。本文整理了 4 種適用于 Vite5 及以下版本的圖片壓縮方案,涵蓋插件化與自定義腳本,兼顧易用性與靈活性。

方法 1:vite-plugin-image-optimizer(推薦 Windows 環(huán)境)

支持 Vite >=3 和 Node >=14

核心特性

  • 技術(shù)底層:基于 Google 開源的 @squoosh/lib,純 JavaScript 實現(xiàn),無二進制依賴(徹底避免 Windows 環(huán)境下的底層工具安裝失敗問題)。
  • 核心能力:支持 PNG/JPG/GIF 壓縮,同時可自動轉(zhuǎn)換為 WebP/AVIF 等現(xiàn)代圖片格式(體積比傳統(tǒng)格式小 30%-50%)。
  • 優(yōu)勢:安裝零門檻、跨平臺兼容性強,支持按文件類型配置壓縮參數(shù),且可自定義過濾文件(如排除小圖)。

步驟 1:安裝依賴

# npm
npm install vite-plugin-image-optimizer --save-dev
# yarn/pnpm
yarn add vite-plugin-image-optimizer -D
pnpm add vite-plugin-image-optimizer -D

步驟 2:Vite 配置(vite.config.js)

import { defineConfig } from 'vite';
import { ViteImageOptimizer } from 'vite-plugin-image-optimizer';

export default defineConfig({
  plugins: [
    ViteImageOptimizer({
       png: {
        quality: 80 // 質(zhì)量(0-100,值越高越清晰,體積越大)
      },
      jpeg: { quality: 80 },
      webp: {
        quality: 80,
        lossless: false
      },
      avif: { quality: 75 }, // AVIF 壓縮率比 WebP 更高,但兼容性稍弱
      include: /\.(png|jpe?g|svg)$/i, // 僅處理指定格式
      exclude: /node_modules/ // 排除 node_modules 目錄
    }),
  ],
});

關(guān)鍵注意事項

  • 若需在開發(fā)環(huán)境預(yù)覽壓縮效果,可將 disable 設(shè)為 false,但會略微影響熱更新速度。
  • preserveOriginalFormat: true 會同時保留原格式(如 PNG)和轉(zhuǎn)換后的現(xiàn)代格式(如 WebP),需在代碼中通過 <picture> 標(biāo)簽實現(xiàn)降級兼容(示例見「通用注意事項」)。

方法 2:rollup-plugin-imagemin(兼容 Rollup 生態(tài))

核心特性

  • 技術(shù)底層:Rollup 官方生態(tài)插件,Vite 基于 Rollup 構(gòu)建,可直接復(fù)用,支持所有 imagemin 生態(tài)插件(如 imagemin-webp、imagemin-avif)。
  • 優(yōu)勢:生態(tài)成熟、配置靈活,可精細(xì)控制每種圖片格式的壓縮邏輯,適合需要深度定制的場景。
  • 不足:依賴 imagemin 系列二進制插件,Windows 環(huán)境需確保已安裝 libpng 等底層庫(可通過 npm install --global windows-build-tools 補裝)。

步驟 1:安裝依賴

需同時安裝核心插件和對應(yīng)圖片格式的壓縮插件:

# 核心插件 + 常用格式壓縮插件
npm install rollup-plugin-imagemin imagemin-gifsicle imagemin-mozjpeg imagemin-pngquant imagemin-webp imagemin-avif --save-dev

步驟 2:Vite 配置(vite.config.js)

import { defineConfig } from 'vite';
import imagemin from 'rollup-plugin-imagemin';

export default defineConfig({
  plugins: [
    imagemin({
      // 壓縮插件集合(按格式配置)
      plugins: [
        // GIF 壓縮:optimizationLevel 1-3(3 最優(yōu))
        imagemin.gifsicle({ optimizationLevel: 3 }),
        // JPEG 壓縮:quality 0-100,progressive 啟用漸進式加載
        imagemin.mozjpeg({ quality: 80, progressive: true }),
        // PNG 壓縮:quality [最小質(zhì)量, 最大質(zhì)量],speed 壓縮速度(1-11,1 最慢最優(yōu))
        imagemin.pngquant({ quality: [0.7, 0.8], speed: 4 }),
        // 自動轉(zhuǎn)換 PNG/JPG 為 WebP
        imagemin.webp({ quality: 80 }),
        // 自動轉(zhuǎn)換為 AVIF(壓縮率更高)
        imagemin.avif({ quality: 75 }),
      ],

      // 高級配置:過濾文件
      include: /.(png|jpe?g|gif)$/i,
      exclude: /public/icons/, // 排除無需壓縮的目錄(如小圖標(biāo))
    }),
  ],
});

關(guān)鍵注意事項

  • 若安裝時出現(xiàn)「二進制依賴缺失」錯誤(如 pngquant 安裝失?。?,Windows 用戶可參考 imagemin 官方文檔 安裝依賴庫,Mac 用戶可通過 brew install libpng 補裝。
  • 該插件僅在 構(gòu)建階段 生效,開發(fā)環(huán)境不處理圖片(不影響開發(fā)速度)。

方法 3:vite-plugin-compress(一站式資源壓縮)

核心特性

  • 核心用途:主要用于壓縮 JS/CSS/HTML 等代碼資源,附帶圖片壓縮功能(基于 imagemin)。
  • 優(yōu)勢:無需安裝多個插件,可同時處理代碼和圖片壓縮,適合追求「輕依賴」的小型項目。
  • 不足:圖片壓縮功能為附加能力,不支持現(xiàn)代格式(WebP/AVIF)轉(zhuǎn)換,僅支持傳統(tǒng)格式(PNG/JPG/GIF)壓縮。

步驟 1:安裝依賴

npm install vite-plugin-compress --save-dev

步驟 2:Vite 配置(vite.config.js)

import { defineConfig } from 'vite';
import compress from 'vite-plugin-compress';

export default defineConfig({
  plugins: [
    compress({
      // 1. 啟用圖片壓縮(默認(rèn) false,需手動開啟)
      image: true,

      // 2. 圖片壓縮參數(shù)(僅支持傳統(tǒng)格式)
      imageOptions: {
        mozjpeg: { quality: 80 }, // JPEG 壓縮
        pngquant: { quality: [0.7, 0.8] }, // PNG 壓縮
        gifsicle: { optimizationLevel: 3 }, // GIF 壓縮
      },

      // 3. 代碼壓縮配置(插件核心能力,可選)
      gzip: true, // 啟用 GZIP 壓縮 JS/CSS
      brotli: true, // 啟用 Brotli 壓縮(比 GZIP 壓縮率更高)
    }),
  ],
});

關(guān)鍵注意事項

  • 若僅需圖片壓縮,不建議使用此插件(功能不如專門的圖片插件全面);若需同時壓縮代碼和圖片,可優(yōu)先選擇。
  • 圖片壓縮僅支持「壓縮體積」,不支持格式轉(zhuǎn)換,需現(xiàn)代格式時需搭配其他工具。

方法 4:自定義腳本(手動控制壓縮邏輯)

核心特性

  • 實現(xiàn)方式:通過 Vite 的 build.onEnd 鉤子,在構(gòu)建完成后調(diào)用 imagemin 核心庫手動處理圖片。
  • 優(yōu)勢:完全自定義壓縮時機、壓縮目錄和參數(shù),適合插件配置頻繁出問題或有特殊需求的場景(如僅壓縮特定目錄的圖片)。
  • 不足:需手動編寫邏輯,不支持開發(fā)環(huán)境預(yù)覽,僅在構(gòu)建后生效。

步驟 1:安裝依賴

# imagemin 核心庫 + 常用格式壓縮插件
npm install imagemin imagemin-pngquant imagemin-mozjpeg imagemin-gifsicle --save-dev

步驟 2:Vite 配置(vite.config.js)

import { defineConfig } from 'vite';
import imagemin from 'imagemin';
import imageminPngquant from 'imagemin-pngquant';
import imageminMozjpeg from 'imagemin-mozjpeg';
import imageminGifsicle from 'imagemin-gifsicle';
import { resolve } from 'path'; // 路徑處理工具

export default defineConfig({
  build: {
    // 構(gòu)建完成后執(zhí)行圖片壓縮(異步鉤子)
    async onEnd() {
      try {
        // 1. 配置需要壓縮的圖片路徑(glob 語法)
        const inputDir = resolve(__dirname, 'dist/assets/**/*.{png,jpg,jpeg,gif}');
        // 2. 壓縮后的輸出目錄(此處與輸入目錄一致,即覆蓋原文件)
        const outputDir = resolve(__dirname, 'dist/assets');

        // 3. 執(zhí)行壓縮
        await imagemin([inputDir], {
          destination: outputDir,
          plugins: [
            imageminPngquant({ quality: [0.7, 0.8] }),
            imageminMozjpeg({ quality: 80 }),
            imageminGifsicle({ optimizationLevel: 3 }),
          ],
        });

        console.log('? 圖片壓縮完成!');
      } catch (error) {
        console.error('? 圖片壓縮失?。?, error);
      }
    },
  },
});

關(guān)鍵注意事項

  • 若不想覆蓋原文件,可將 outputDir 設(shè)為其他目錄(如 dist/assets/compressed),但需同步修改代碼中圖片的引用路徑。
  • 建議在 try/catch 中包裹邏輯,避免壓縮失敗導(dǎo)致整個構(gòu)建流程中斷。

通用注意事項(避坑指南)

壓縮質(zhì)量的平衡
質(zhì)量參數(shù)(如 quality: 80)并非越高越好:過高會導(dǎo)致體積過大,過低會導(dǎo)致失真。建議根據(jù)場景調(diào)整:

  • 產(chǎn)品圖 / 封面圖:quality: 80-90(優(yōu)先保證清晰度);
  • 圖標(biāo) / 背景圖:quality: 60-70(優(yōu)先控制體積)。

現(xiàn)代格式(WebP/AVIF)的兼容方案
現(xiàn)代格式體積小,但部分舊瀏覽器(如 IE)不支持,需通過 <picture> 標(biāo)簽實現(xiàn)降級:

<picture>
  <!-- 優(yōu)先加載 AVIF -->
  <source srcset="image.avif" type="image/avif">
  <!-- 其次加載 WebP -->
  <source srcset="image.webp" type="image/webp">
  <!-- 降級加載 PNG/JPG -->
  <img src="image.png" alt="示例圖片">
</picture>

開發(fā)環(huán)境不建議壓縮
圖片壓縮會消耗 CPU 資源,導(dǎo)致熱更新速度變慢。所有插件默認(rèn)在開發(fā)環(huán)境禁用壓縮,若需預(yù)覽效果,可臨時開啟(但不推薦長期使用)。

路徑問題排查
壓縮后若圖片加載失敗,需檢查:

  • 插件的 include/exclude 配置是否誤過濾了圖片目錄;
  • 自定義腳本的 inputDir 路徑是否正確(可通過 console.log(inputDir) 打印驗證)。

場景化選擇建議

項目場景推薦方案核心原因
Windows 環(huán)境、新手用戶vite-plugin-image-optimizer無二進制依賴,安裝簡單,支持現(xiàn)代格式轉(zhuǎn)換
中大型項目、需深度定制rollup-plugin-imagemin生態(tài)成熟,可靈活擴展 imagemin 插件
小型項目、需壓縮代碼 + 圖片vite-plugin-compress輕依賴,一站式處理所有靜態(tài)資源壓縮
特殊需求(如自定義壓縮時機)自定義腳本(imagemin + build.onEnd)完全手動控制,避免插件配置沖突

所有方案的核心壓縮能力均基于 imagemin 或 squoosh,最終壓縮效果差異極小,選擇時優(yōu)先考慮 兼容性、易用性 與項目實際需求即可。

以上就是Vite實現(xiàn)圖片壓縮的四種有效方法的詳細(xì)內(nèi)容,更多關(guān)于Vite圖片壓縮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

遂川县| 庆城县| 兰溪市| 塔河县| 黄陵县| 黄浦区| 南岸区| 宝坻区| 仙居县| 全椒县| 保康县| 白玉县| 芷江| 大安市| 郑州市| 宜昌市| 五华县| 蚌埠市| 朝阳市| 砀山县| 德惠市| 石泉县| 宜州市| 绵阳市| 利津县| 阳春市| 清苑县| 扎囊县| 来安县| 和政县| 年辖:市辖区| 武平县| 泽库县| 寿宁县| 荃湾区| 嵊州市| 新龙县| 临汾市| 长葛市| 赞皇县| 青田县|