Unplugin lets you write bundler plugins once and they work across Vite, Webpack, Rollup, esbuild, and Rspack.
Create a Universal Plugin
import { createUnplugin } from "unplugin";
const myPlugin = createUnplugin((options) => ({
name: "my-plugin",
transformInclude: (id) => id.endsWith(".vue") || id.endsWith(".tsx"),
transform(code, id) {
// Transform code — works in ALL bundlers
return code.replace(/__DEV__/g, JSON.stringify(options.dev ?? false));
},
buildStart() {
console.log("Build started!");
}
}));
// Use in any bundler:
export const vite = myPlugin.vite;
export const webpack = myPlugin.webpack;
export const rollup = myPlugin.rollup;
export const esbuild = myPlugin.esbuild;
export const rspack = myPlugin.rspack;
Virtual Modules
const virtualPlugin = createUnplugin(() => ({
name: "virtual-module",
resolveId(id) {
if (id === "virtual:config") return "\0virtual:config";
},
load(id) {
if (id === "\0virtual:config") {
return `export const config = ${JSON.stringify({ version: "1.0" })}`;
}
}
}));
// In your app:
import { config } from "virtual:config";
Popular Unplugins
- unplugin-auto-import — auto-import APIs
- unplugin-vue-components — auto-import Vue components
- unplugin-icons — icons as components
Key Features
- Write once, run on any bundler
- Virtual modules support
- Transform hooks
- Resolve hooks
- Active ecosystem
Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify or email spinov001@gmail.com for custom solutions.
Top comments (0)