首页 > 解决方案 > Webpack (Encore):使用 image-webpack-loader 将图像转换为 webp

问题描述

我正在尝试使用 Webpack Encore 中的image-webpack-loader插件将我的jpeg图像转换为webp格式。以下配置成功缩小了我的文件,但没有将它们转换为图像。webp

webpack.config.js

test: /\.(gif|png|jpe?g|svg)$/i,
loader: 'image-webpack-loader',
options: {
   disable: true, //bypassOnDebug
   convertPathData: false,
   mozjpeg: { //works
      progressive: true,
      quality: '80-90'
    },
   webp: { //doesn't convert my images to webp
      quality: 75,
      enabled: true
   }
 }

如何使用插件实现我想要的image-webpack-loader?或者我应该在这个插件旁边使用另一个插件吗?

标签: webpackwebpwebpack-encore

解决方案


为时已晚,但仅适用于未来的谷歌员工:

看起来 image-webpack-loader 中的信息有点误导。它可以做的是优化现有的 webp 文件以减小其大小。

虽然前面的说法可能正确或错误,但我还没有弄清楚如何使用这个加载器将图像转换为 webp。

相反,我使用 imagemin-webp 生成 webps,然后将其导入到通过 image-webpack-loader 和 file-loader 传递的文件中。

所以,最终的结果是这样的:

import React from "react";
import waveImgJpg from "Images/common/wave.jpg";
import waveImgWebP from "Images/webp/wave.webp";
import styles from "IndexStyles/mainContent.scss";

export const MainContent = () => {
    return (
        <picture>
            <source className={styles.waveImg} srcSet={waveImgWebP} type="image/webp" />
            <img className={styles.waveImg} src={waveImgJpg} alt="beatiful wave" title="beatiful wave" />
        </picture>
    );
};

这段代码是我用来启动新项目的设置的一部分,配置已经到位。

所以,如果你有兴趣,你可以在这里找到完整的 webpack.js 以及所有其他文件。


推荐阅读