Webpack:在插件中发出虚拟模块

时间:2018-02-21 02:20:19

标签: webpack webpack-plugin webpack-loader

我正在编写一个webpack插件和加载器,我想创建一个通过我的插件生成的“动态”模块。

基本上,我希望我的加载器向动态模块发出导入,如下所示:

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

插件应生成"./the-dynamic-module",理想情况下,每次动态模块更改时都应重新构建加载程序。

有没有办法实现这个目标?

有一个插件generates virtual modules,但它们是静态的。在编译期间,我想生成一个动态的。

任何帮助表示赞赏!欢呼声。

1 个答案:

答案 0 :(得分: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将重新启动编译并触发配置为处理该文件的加载器类型。