rollup-plugin-swc
SWC is an extensible Rust-based platform for the next generation of fast developer tools. This plugin is designed to replace rollup-plugin-typescript2
, @rollup/plugin-typescript
, @rollup/plugin-babel
and rollup-plugin-terser
for you.
Comparison
Install
$ npm i @swc/core rollup-plugin-swc3
Usage
import { swc } from 'rollup-plugin-swc3';
export default {
input: 'xxxx',
output: {},
plugins: [
swc({
include: /\.[jt]sx?$/,
exclude: /node_modules/,
tsconfig: 'tsconfig.json',
jsc: {}
}),
];
}
If you want autocompletion in your IDE or type check:
import { swc, defineRollupSwcOption } from 'rollup-plugin-swc3';
export default {
input: 'xxxx',
output: {},
plugins: [
swc(defineRollupSwcOption({
})),
];
}
const swcPluginConfig = {}
include
and exclude
can be String | RegExp | Array<String | RegExp>
, when supplied it will override default values.- It uses
importHelpers
, experimentalDecorators
, emitDecoratorMetadata
, jsxFactory
, jsxFragmentFactory
, target
, baseUrl
and paths
options from your tsconfig.json
or jsconfig.json
as default values if your doesn't provide corresponding swc configuration.
- Currently,
rollup-plugin-swc
won't use esModuleInterop
from your tsconfig.json
as swc requires module.type
configuration when module.noInterop
is given. jsconfig.json
will be ignored if tsconfig.json
and jsconfig.json
both exist.baseUrl
and paths
will be passed to swc directly. They won't affect how rollup resolve your imports. Please use other plugins to resolve your imports' aliases (e.g., add rollup-plugin-typescript-paths or rollup-plugin-tsconfig-paths before @rollup/plugin-node-resolve
).
Standalone Minify Plugin
If you only want to use swc
to minify your bundle:
import { minify } from 'rollup-plugin-swc3'
export default {
plugins: [
minify({
}),
],
}
If you want autocompletion in your IDE or type check:
import { minify, defineRollupSwcMinifyOption } from 'rollup-plugin-swc3'
export default {
plugins: [
minify(
defineRollupSwcMinifyOption({
})
),
],
}
const swcMinifyConfig = {}
Write your Rollup config in TypeScript
You can write your Rollup config file in rollup.config.ts
, and use the following command:
rollup --config rollup.config.ts --configPlugin swc3
TypeScript Declaration File
There are serveral ways to generate declaration file:
- Use
tsc
with emitDeclarationOnly
, the slowest way but you get type checking, it doesn't bundle the .d.ts
files. - Use
rollup-plugin-dts
which generates and bundle .d.ts
, also does type checking. It is used by this plugin as well.
Use with Non-react JSX
You can either configure it in your tsconfig.json
or in your rollup.config.js
.
import vueJsx from 'rollup-plugin-vue-jsx-compat'
import { swc, defineRollupSwcOption } from 'rollup-plugin-swc3';
export default {
input: 'xxxx',
output: {},
plugins: [
vueJsx(),
swc(defineRollupSwcOption({
jsc: {
transform: {
react: {
pragma: 'vueJsxCompat'
}
}
}
})),
];
}
import { swc, defineRollupSwcOption } from 'rollup-plugin-swc3';
export default {
input: 'xxxx',
output: {},
plugins: [
vueJsx(),
swc(defineRollupSwcOption({
jsc: {
transform:{
react: {
pragma: 'h',
pragmaFrag: 'Fragment'
}
}
}
})),
];
}
rollup-plugin-swc © Sukka, Released under the MIT License.
Inspired by egoist's rollup-plugin-esbuild.
Authored and maintained by Sukka with help from contributors (list).
Personal Website · Blog · GitHub @SukkaW · Telegram Channel @SukkaChannel · Twitter @isukkaw · Keybase @sukka