Как получить доступ к метаданным в Rule.generator.имя файла (как функция), сгенерированное в ответе моего собственного загрузчика

#webpack

#webpack

Вопрос:

Я работаю над собственным загрузчиком изображений для Webpack 5. Этот загрузчик может выполнять различные манипуляции с исходным изображением, и в результате он отправляет обратно измененное изображение в виде буфера и важного объекта метаданных через асинхронный обратный вызов загрузчика:

 // MyImageLoader.js
module.exports = async function(content) {
  const callback = this.async();

  Image(this.resourcePath, {
    // ...image manipulation options
  }).then(result => {

    // result.imageBuffer is the new image as a Buffer
    // result.metaData object stores the new width, height, mimetype, ext, etc...
    callback(null, result.imageBuffer, null, result.metaData);

  }).catch(err => {
    callback(err);
  });
}
 

… и в моей конфигурации Webpack я использую функцию Asset Modules, чтобы выходной файл переименовывался с использованием информации метаданных, сгенерированной загрузчиком:

 {
  test: /.(jpe?g|png|webp|avif|tiff)$/i,
  type: 'asset',
  generator: {
    filename: (pathData) => {
      // console.debug(pathData);
      // console.debug(pathData.module);

      let filename = '[name]-[width]x[height].[contenthash:8][ext]';

      // now I need to somehow access my metaData
      // to let [width] replaced by metaData.width
      // to let [height] replaced by metaData.height
      // to let [ext] replaced by metaData.ext (the ext of the converted file)
      // ...but it seems impossible...

      return filename;
    }
  },
  use: [
    {
      loader: require.resolve('./MyImageLoader.js'),
      options: { /* some options */ }
    }
  ]
}
 

Итак, мой вопрос:

  • как получить доступ к моему metaData (который уже отправлен моим загрузчиком) Rule.generator.filename() ?
  • или где / как сохранить мои метаданные в загрузчике, чтобы иметь к ним доступ Rule.generator.filename() ?

Важно отметить, что в моем загрузчике я не хочу использовать специфические свойства Webpack или this._module который устарел.

Любое рабочее решение будет высоко оценено!

Спасибо!