#reactjs #webpack #craco
Вопрос:
Я пытаюсь добавить этот плагин, который использует этот плагин webpack, в мой конфигурационный файл craco, следуя руководству, но он не работает.
const CracoAlias = require('craco-alias');
const imageOptimizer = require('craco-image-optimizer-plugin');
module.exports = function ({ env }) {
return {
reactScriptsVersion: 'react-scripts',
style: {
postcss: {
plugins: [
require('tailwindcss'),
require('postcss-focus-visible'),
require('autoprefixer'),
],
},
},
plugins: [
{
plugin: imageOptimizer,
// image-webpack-plugin options
options: {
mozjpeg: {
progressive: true,
quality: 65,
},
// optipng.enabled: false will disable optipng
optipng: {
enabled: false,
},
pngquant: {
quality: [0.65, 0.9],
speed: 4,
},
gifsicle: {
interlaced: false,
},
// the webp option will enable WEBP
webp: {
quality: 75,
},
},
},
{
plugin: CracoAlias,
options: {
//CracoAlias options
},
},
],
};
};
Плагин должен оптимизировать изображения, но этого не происходит. Есть какие-нибудь идеи? Что-то не так с моим файлом конфигурации? Спасибо.
Комментарии:
1. Является ли общий файл таким
craco.config.js
?2. Да, это тот самый файл
3. пожалуйста, поделитесь командой, которую вы используете для сборки.
4. а также добавить ваш
package.json
файл5. Я использую «сборку craco» для сборки. И это версии: «@craco/craco»: «^6.1.2», «плагин craco-оптимизатора изображений»: «^0.0.4»,
Ответ №1:
Похоже, это была проблема с реактивными сценариями. Пришлось добавить плагин вручную, вот так:
const { getLoaders, loaderByName } = require('@craco/craco');
module.exports = {
overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions }) => {
const config = { ...webpackConfig };
const urlLoaderCandidates = getLoaders(config, loaderByName('url-loader'));
const urlLoader = urlLoaderCandidates.matches.find(
m =>
m.loader amp;amp;
m.loader.test amp;amp;
(Array.isArray(m.loader.test)
? m.loader.test.some(r => r.toString().indexOf('jpe?g') >= 0)
: m.loader.test.toString().indexOf('jpe?g') >= 0)
);
if (!urlLoader) {
throw Error(
'could not find correct url-loader. did you change react-scripts version?'
);
}
const loader = urlLoader.loader;
loader.use = [
{
loader: loader.loader,
options: Object.assign({}, loader.options),
},
{
/**
* @see https://github.com/tcoopman/image-webpack-loader
*/
loader: 'image-webpack-loader',
options: pluginOptions,
},
];
delete loader.loader;
delete loader.options;
return config;
},
};
А затем импортируйте файл вместо пакета.