web-infra-dev / rsbuild

The Rspack-based build tool. It's fast, out-of-the-box and extensible.
https://rsbuild.dev/
MIT License
1.56k stars 122 forks source link

[Bug]: Using the virtual file system interface[compiler.inputFileSystem], prompt that the virtual file does not exist when referenced in the project #3681

Open Dengpei1688 opened 2 hours ago

Dengpei1688 commented 2 hours ago

Version

最新rsbuild版本

Details

编写rspack虚拟文件插件,然后添加到rspack配置中去,项目中引入虚拟文件,提示路径下不存在。

// RspackVirtualModulesPlugin.js class RspackVirtualModulesPlugin { constructor(modules) { this.modules = modules || {}; }

apply(compiler) { compiler.hooks.beforeCompile.tapAsync( "RspackVirtualModulesPlugin", (params, callback) => { const fs = compiler.inputFileSystem; Object.keys(this.modules).forEach((modulePath) => { // 如果虚拟模块已经存在,则更新它 if (fs._virtualFiles) { fs._virtualFiles[modulePath] = this.modules[modulePath]; } else { // 创建一个虚拟文件系统并添加虚拟模块 fs._virtualFiles = { ...this.modules }; } }); callback(); } ); } }

export default RspackVirtualModulesPlugin

// 在rsbuild.config.js文件中注册RspackVirtualModulesPlugin const RspackVirtualModulesPlugin = require('./RspackVirtualModulesPlugin');

rspack: (config, { rspack, HtmlPlugin }) => {

config.plugins.push( new RspackVirtualModulesPlugin({ [node_modules/home-main-modules.js]: module.exports = require("@modules/home-main");, }) );

return config

}

// 项目中引用 require('home-main-modules');

// 结果提示: Uncaught Error: Cannot find module 'home-main-modules' Image

Reproduce link

no

Reproduce Steps

1、编写rspack虚拟文件插件RspackVirtualModulesPlugin

2、在rsbuild.config.js文件中tools.rspack方法中注册虚拟文件插件RspackVirtualModulesPlugin

new RspackVirtualModulesPlugin({ [node_modules/home-main-modules.js]: module.exports = require("@modules/home-main");, })

3、项目引入注册的虚拟文件路径 require('home-main-modules');

结果:提示Uncaught Error: Cannot find module 'home-main-modules'

备注:控制台有显示虚拟文件插件注册成功 RspackVirtualModulesPlugin { modules: { 'node_modules/home-main-modules.js': 'module.exports = require("@modules/home-main");' } }

github-actions[bot] commented 2 hours ago

Hello @Dengpei1688. Please provide a reproduction repository or online demo. For background, see Why reproductions are required. Thanks ❤️