@hyperse/unplugin-swc
A high-performance SWC plugin for Vite and Rollup that provides fast TypeScript/JavaScript compilation and transformation.
Features
- 🚀 Lightning fast compilation with SWC
- 🔄 Seamless integration with Vite and Rollup
- ⚙️ Full TypeScript support with decorator transformations
- 🛠 Configurable through tsconfig.json or .swcrc
- 📦 Minification support for Rollup builds
Usage
Vite or Rollup:
import { unpluginSwc } from '@hyperse/unplugin-swc';
export default {
plugins: [
unpluginSwc.vite({
jsc: {
target: 'es2022', // Does not accept `esnext` }
},
}),
],
};
tsconfig.json
Following SWC options are inferred from tsconfig.json
:
jsc.parser.syntax
: based on file extension
jsc.parser.jsx
, parser.tsx
: compilerOptions.jsx
jsc.parser.decorators
: compilerOptions.experimentalDecorators
jsc.transform.react.pragma
: compilerOptions.jsxFactory
jsc.transform.react.pragmaFrag
: compilerOptions.jsxFragmentFactory
jsc.transform.react.importSource
: compilerOptions.jsxImportSource
jsc.transform.legacyDecorator
: compilerOptions.experimentalDecorators
jsc.transform.decoratorMetadata
: compilerOptions.emitDecoratorMetadata
jsc.keepClassNames
: when decorator is enabled, because original class name is required by libs like type-graphql
to generate correct graphql type
If you wish to disable this behavior and use .swcrc
to control above jsc
options, you can use tsconfigFile
option:
// Or swc.rollup
unpluginSwc.vite({
tsconfigFile: false,
});
// It's also possible to use a custom tsconfig file instead of tsconfig.json
unpluginSwc.vite({
tsconfigFile: './tsconfig.build.json',
});
Minification
Use the minify: true
option, it only works for Rollup as Vite uses esbuild to minify the code and cannot be changed.
To have advanced control over the minification process, use jsc.minify
option in .swcrc
.
Vite
esbuild
will be automatically disabled if you use this plugin.
Options
This plugin accepts all @swc/core
options, except for jsc
which should be configured in .swcrc
instead, and some extra options that are specific to this plugin:
options.tsconfigFile
- Type:
boolean
, string
- Default:
tsconfig.json
Disable the use of tsconfig file or specify a custom one.
options.include
- Type:
RegExp
- Default:
/\.[jt]sx?$/
Files to include in the transpilation process.
options.exclude
- Type:
RegExp
- Default:
/node_modules/
Files to exclude in the transpilation process.
options.jsc
Custom jsc options to merge with the default one.