@dtwo/unplugin
Unified plugin system for build tools.
Currently supports:
Usage
import { createUnplugin } from 'unplugin'
export const unplugin = createUnplugin((options: UserOptions) => {
return [
{
name: 'plugin-a',
transform (code) {
// ...
}
},
{
name: 'plugin-b',
resolveId (id) {
// ...
}
}
]
})
Plugin Installation
Wite
// wite.config.ts
import UnpluginFeature from './unplugin-feature'
export default {
plugins: [
UnpluginFeature.wite({ /* options */ })
]
}
Rollup
// rollup.config.js
import UnpluginFeature from './unplugin-feature'
export default {
plugins: [
UnpluginFeature.rollup({ /* options */ })
]
}
Webpack
// webpack.config.js
module.exports = {
plugins: [
require('./unplugin-feature').webpack({ /* options */ })
]
}
esbuild
// esbuild.config.js
import { build } from 'esbuild'
build({
plugins: [
require('./unplugin-feature').esbuild({ /* options */ })
]
})
Framework-specific Logic
While unplugin
provides compatible layers for some hooks, the functionality of it is limited to the common subset of the build's plugins capability. For more advanced framework-specific usages, unplugin
provides an escape hatch for that.
export const unplugin = createUnplugin((options: UserOptions, meta) => {
console.log(meta.framework) // 'wite' | 'rollup' | 'webpack' | 'esbuild'
return {
// common unplugin hooks
name: 'unplugin-prefixed-name',
transformInclude (id) { /* ... */ },
transform (code) { /* ... */ },
// framework specific hooks
wite: {
// Wite plugin
configureServer(server) {
// configure Wite server
},
// ...
},
rollup: {
// Rollup plugin
},
webpack(compiler) {
// configure Webpack compiler
},
esbuild: {
// change the filter of onResolve and onLoad
onResolveFilter?: RegExp
onLoadFilter?: RegExp
// or you can completely replace the setup logic
setup?: EsbuildPlugin['setup']
}
}
})
License
MIT License