https://github.com/rspack-contrib/rsbuild-plugin-virtual-module
Support VirtualModules in Rsbuild. The simplest and most flexible way to build with a compiling magic 🪄
https://github.com/rspack-contrib/rsbuild-plugin-virtual-module
rsbuild rsbuild-plugin virtual-modules
Last synced: 6 months ago
JSON representation
Support VirtualModules in Rsbuild. The simplest and most flexible way to build with a compiling magic 🪄
- Host: GitHub
- URL: https://github.com/rspack-contrib/rsbuild-plugin-virtual-module
- Owner: rspack-contrib
- License: mit
- Created: 2025-03-27T03:45:11.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-04-28T04:07:55.000Z (6 months ago)
- Last Synced: 2025-05-06T19:14:01.335Z (6 months ago)
- Topics: rsbuild, rsbuild-plugin, virtual-modules
- Language: TypeScript
- Homepage:
- Size: 43.9 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rstack - rsbuild-plugin-virtual-module
README
# rsbuild-plugin-virtual-module🧙
The simplest and most flexible way to build with a compiling magic 🪄
An Rsbuild plugin that allows you to create virtual modules, the pro version of [rspack-plugin-virtual-module](https://github.com/rspack-contrib/rspack-plugin-virtual-module) with loader API.
## Usage
Install:
```bash
npm add rsbuild-plugin-virtual-module -D
```
Add plugin to your `rsbuild.config.ts`:
```ts
// rsbuild.config.ts
import { pluginVirtualModule } from 'rsbuild-plugin-virtual-module';
export default {
plugins: [
pluginVirtualModule({
virtualModules: {
'virtual-foo': async () => {
return 'export default {}';
},
},
}),
],
};
```
```ts
import foo from 'virtual-foo';
console.log(foo); // {}
```
## Options
### virtualModules
Generate virtual modules, where the key is the name of the virtual module and the value is `TransformHandler`. See [Rsbuild - api.transform](https://rsbuild.dev/plugins/dev/core#apitransform)
- Type:
```ts
import type { TransformHandler } from '@rsbuild/core';
type VirtualModules = Record;
```
- Default: `{}`
- Example:
```js
pluginVirtualModule({
virtualModules: {
'virtual-json-list': async ({ addDependency, addContextDependency }) => {
const jsonFolderPath = join(__dirname, 'json');
const ls = await readdir(jsonFolderPath);
addContextDependency(jsonFolderPath);
const res: Record = {};
for (const file of ls) {
if (file.endsWith('.json')) {
const jsonFilePath = join(jsonFolderPath, file);
const jsonContent = await readFile(jsonFilePath, 'utf-8');
addDependency(jsonFilePath);
res[file] = JSON.parse(jsonContent);
}
}
return `export default ${JSON.stringify(res)}`;
},
},
});
```
```js
import jsonList from 'virtual-json-list';
console.log(jsonList);
```
### tempDir
The name of the virtual module folder under `node_modules`.
- Type: `string`
- Default: `.rsbuild-virtual-module`
## License
[MIT](./LICENSE).