Webpack: создать виртуальный модуль внутри плагина

Я пишу плагин и загрузчик веб-пакетов, и я хотел бы создать "динамический" модуль, который генерируется через мой плагин.

По сути, я хочу, чтобы мой загрузчик генерировал импорт в динамический модуль, например так:

module.exports = function (content) {
  return `
    const dynamicModule = require('./the-dynamic-module')
    // module.exports = ...
`;
}

Плагин должен генерировать "./the-dynamic-module"и, в идеале, загрузчик следует перестраивать каждый раз, когда меняется динамический модуль.

Есть ли способ добиться этого?

Есть плагин, который генерирует виртуальные модули, но они статичны. Я хотел бы создать динамический, во время компиляции.

Любая помощь приветствуется! Приветствия.

1 ответ

Вы можете использовать плагин ниже для генерации виртуальных модулей во время компиляции (я являюсь автором этого плагина): https://github.com/sysgears/webpack-virtual-modules

var webpack = require("webpack");
var VirtualModulesPlugin = require("webpack-virtual-modules");

var virtualModules = new VirtualModulesPlugin();

var compiler = webpack({
    // ...
    plugins: [
       virtualModules
    ]
});

compiler.watch();

Позже в другом коде, возможно, в вашем плагине Webpack, который вы называете:

virtualModules.writeModule('./the-dynamic-module.js', 
    'module.exports = ...the contents of dynamic module...');

Каждый раз, когда вы пишете динамический модуль через virtualModules.writeModule это будет иметь тот же эффект, как если бы это был реальный файл в файловой системе, которая была изменена - Webpack перезапустит компиляцию и запустит загрузчики, сконфигурированные для обработки этого типа файлов.

Другие вопросы по тегам