VirtualModulesPlugin

Added in v1.5.0Rspack only

VirtualModulesPlugin 允许你在内存中创建、修改和删除文件,Rspack 会将这些虚拟文件视为真实存在于文件系统中的文件进行处理。

该插件是 webpack-virtual-modules 的 Rust 实现版本,与 Rspack 深度集成,在提供相同功能的同时拥有更好的性能。

使用方法

基础用法

创建 VirtualModulesPlugin 实例时,可以在构造函数中直接配置虚拟模块:

import { rspack } from '@rspack/core';

new rspack.experiments.VirtualModulesPlugin({
  // ...modules
});
  • 参数:
    • modules(可选):一个对象,其中键是文件路径,值是文件内容。
rspack.config.mjs
import { rspack } from '@rspack/core';

export default {
  plugins: [
    new rspack.experiments.VirtualModulesPlugin({
      'src/generated/config.js': 'export default { version: "1.0.0" };',
      'src/generated/constants.js': `
        export const API_URL = "${process.env.API_URL || 'http://localhost:3000'}";
        export const DEBUG = ${process.env.NODE_ENV !== 'production'};
      `,
    }),
  ],
};

动态模块创建

你可以使用 writeModule 方法动态创建或修改虚拟模块:

  • 类型:
function writeModule(filePath: string, contents: string): void;
  • 参数:

    • filePath:相对于 compiler.context 的虚拟文件路径
    • contents:虚拟文件的内容
  • 示例:

rspack.config.mjs
import { rspack } from '@rspack/core';

const virtualModulesPlugin = new rspack.experiments.VirtualModulesPlugin();

export default {
  plugins: [
    virtualModulesPlugin,
    {
      apply(compiler) {
        compiler.hooks.beforeCompile.tap('MyPlugin', () => {
          // 动态创建模块
          const moduleContent = generateSomeContent();
          virtualModulesPlugin.writeModule('src/dynamic.js', moduleContent);
        });
      },
    },
  ],
};