Imagemin'i webpack ile kullanma

Katie Hempenius
Katie Hempenius

Imagemin webpack eklentisini ayarlama

Bu Aksaklık zaten webpack, webpack-cli ve imagemin-webpack-plugin. Imagemin yapılandırmasını eklemek için webpack.config.js dosyanızı düzenleyin.

Bu proje için mevcut webpack.config.js, şuradan görüntü kopyalıyor: images/ dizinini dist/ dizinine gönderdim, ancak sıkıştırmaktır.

  • Projeyi düzenlenebilir hale getirmek için Düzenlemek için Remiks'i tıklayın.
  • Öncelikle, bu kodu sayfanın üst kısmına ekleyerek Imagemin eklentisini tanımlayın. webpack.config.js:
const ImageminPlugin = require('imagemin-webpack-plugin').default;
  • Sonra, aşağıdaki kodu plugins[] dizisindeki son öğe olarak ekleyin. Bu Webpack'in kullandığı eklentiler listesine Imagemin'i ekler:
new ImageminPlugin()

✔︎ Check-in

webpack.config.js dosyanızın tamamı artık aşağıdaki gibi görünecektir:

const ImageminPlugin = require('imagemin-webpack-plugin').default;
const CopyWebpackPlugin = require('copy-webpack-plugin');
const path = require('path');

module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  plugins: [
     new CopyWebpackPlugin([{
       from: 'img/**/**',
       to: path.resolve(__dirname, 'dist')
     }]),
     new ImageminPlugin()
  ]
}

Artık Imagemin'i kullanarak görüntüleri sıkıştıran bir web paketi yapılandırmanız var.

Webpack'i çalıştır

  • Terminal'i tıklayın (not: Terminal düğmesi görünmüyorsa Tam Ekran seçeneğini kullanmanız gerekebilir).
  • Resimlerinizi sıkıştırmak için aşağıdaki komutu pencereye yazarak webpack'i çalıştırın: konsol:
webpack --config webpack.config.js --mode development

Peki, web paketini üretim modunda çalıştırırsanız ne olur?

  • Web paketini yeniden çalıştır, ancak bu kez üretim modunda:
webpack --config webpack.config.js --mode production

Bu kez webpack, PNG dosyanızın dosyaları, biraz sıkıştırmaya rağmen önerilen boyut sınırını aşıyor. (web paketinin development ve production modları farklı unsurlara öncelik verir. bu nedenle yalnızca webpack'i üretim modunda çalıştırırken görürsünüz.)

Bu uyarıyı düzeltmek için Imagemin yapılandırmamızı özelleştirin.

Imagemin yapılandırmanızı özelleştirin

Aşağıdaki nesneyi ImageminPlugin() hedefine ileterek PNG resimlerini sıkıştırmak için ayarlar ekleyin:

{pngquant: ({quality: [0.5, 0.5]})}

Bu kod, Imagemin'e Pngquant eklentisini kullanarak PNG'leri sıkıştırmasını söyler. İlgili içeriği oluşturmak için kullanılan quality alanı,minmax sıkıştırma seviyesi: 0 en düşük, 1 ise en yüksek değerdir. Tüm resimleri %50 kalitede sıkıştırılması için 0.5 değerini hem minimum hem de maksimum değer olarak iletin.

✔︎ Check-in

webpack.config.js dosyanız artık şu şekilde görünmelidir:

const ImageminPlugin = require('imagemin-webpack-plugin').default;
const CopyWebpackPlugin = require('copy-webpack-plugin');
const path = require('path');

module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  plugins: [
    new CopyWebpackPlugin([{
        from: 'img/**/**',
        to: path.resolve(__dirname, 'dist')
    }]),
    new ImageminPlugin({
      pngquant: ({quality: [0.5, 0.5]}),
      })
  ]
}

Peki ya JPEG'lere? Projede JPEG resimleri de bulunduğundan, nasıl sıkıştırıldıklarını da belirleyebilirsiniz.

Imagemin Yapılandırmanızı özelleştirme (devamı)

JPG sıkıştırması için imagemin-webpack-plugin ürününün varsayılan eklentisini kullanmak yerine (imagemin-jpegtran) olarak ayarlamak için imagemin-mozjpeg eklentisini kullanın. Jpegtran'ın aksine Mozjpeg, JPG sıkıştırmanız için bir sıkıştırma kalitesi belirlemenize olanak tanır. Biz Mozjpeg eklentisini bu Glitch'te sizin için yüklemiş ancak yeniden yüklemeniz gerekir: webpack.config.js dosyanızı düzenleyin:

  • Şu satırı ekleyerek imagemin-mozjpeg eklentisini başlatın: (webpack.config.js dosyanızın üstüne)
const imageminMozjpeg = require('imagemin-mozjpeg');
  • ImageminPlugin() öğesine geçirilen nesneye, şu şekilde bir plugins özelliği ekleyin: nesne artık şu şekilde görünür:
new ImageminPlugin({
  pngquant: ({quality: [0.5, 0.5]}),
  plugins: [imageminMozjpeg({quality: 50})]
})

Bu kod, webpack'in JPG'leri 50 kalitede sıkıştırmasını ister (0 en kötüdür; 100'dür).

Varsayılan eklenti olan bir eklenti için ayarlar ekliyorsanız imagemin-webpack-plugin ise nesneye anahtar-nesne çifti olarak eklenebilir ImageminPlugin() adresine iletildi. Pnquant ayarları iyi bir örnektir. bu.

Ancak, varsayılan olmayan eklentiler için ayarlar ekliyorsanız (örneğin, Mozjpeg) içeriyorsa, dosyalar dosyaya karşılık gelen diziye dahil edilerek eklenmelidir plugins özelliği.

✔︎ Check-in

Kodunuz aşağıdaki gibi görünecektir:

const imageminMozjpeg = require('imagemin-mozjpeg');
const ImageminPlugin = require('imagemin-webpack-plugin').default;
const CopyWebpackPlugin = require('copy-webpack-plugin');
const path = require('path');

module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  plugins: [
    new CopyWebpackPlugin([{
      from: 'img/**/**',
      to: path.resolve(__dirname, 'dist')
    }]),
    new ImageminPlugin({
      pngquant: ({quality: [0.5, 0.5]}),
      plugins: [imageminMozjpeg({quality: 50})]
    })
  ]
}

Web paketini yeniden çalıştırıp Lighthouse ile sonuçları doğrulayın

  • Konsolda web paketini yeniden çalıştırın:
webpack --config webpack.config.js --mode production

Yaşasın! Değişikliklerinizin web paketi uyarılarını düzeltmiş olması gerekir.

webpack sizi büyük resimler konusunda uyarır, ancak resimlerin büyük boyutlu resimler olup olmadığını sıkıştırılmamış veya az sıkıştırılmış biçimde sunulur. Bu nedenle, Lighthouse'u ziyaret edin.

Lighthouse'un "Görüntüleri verimli bir şekilde kodlayın" performans denetimi, uygulamanızın JPEG resimleri en iyi şekilde sıkıştırılır.

  • Siteyi önizlemek için Uygulamayı Görüntüle'ye basın. Ardından, Tam ekran tam ekran.
  • Lighthouse performans denetimini çalıştırın (Lighthouse > Seçenekler > Performans) hatasını kontrol edin ve kodun etkili bir şekilde görüntüler denetiminden geçildi.

"Resimleri verimli bir şekilde kodlama"yı geçme Lighthouse'da denetim

Başarıyla gerçekleştirildi. Sayfanızdaki resimleri en iyi şekilde sıkıştırmak için Imagemin'i kullandınız.