A Rollup plugin that uses esbuild as a fast TypeScript/JavaScript compiler and minifier, replacing traditional tools like rollup-plugin-typescript2 and rollup-plugin-terser
npx @tessl/cli install tessl/npm-rollup-plugin-esbuild@6.2.0Rollup Plugin ESBuild is a high-performance Rollup plugin that leverages esbuild's fast TypeScript/JavaScript compilation and minification capabilities. It serves as a comprehensive replacement for multiple traditional Rollup plugins including rollup-plugin-typescript2, @rollup/plugin-typescript, and rollup-plugin-terser.
npm install rollup-plugin-esbuild esbuild --save-devimport esbuild, { minify } from "rollup-plugin-esbuild";For CommonJS:
const esbuild = require("rollup-plugin-esbuild").default;
const { minify } = require("rollup-plugin-esbuild");import esbuild from "rollup-plugin-esbuild";
export default {
input: "src/index.ts",
output: {
file: "dist/bundle.js",
format: "es",
},
plugins: [
esbuild({
include: /\.[jt]sx?$/,
exclude: /node_modules/,
sourceMap: true,
minify: process.env.NODE_ENV === "production",
target: "es2017",
jsx: "transform",
tsconfig: "tsconfig.json",
}),
],
};Rollup Plugin ESBuild is built around several key components:
minify function provides minification-only functionality for projects that only need code compressionCore esbuild transformation plugin providing TypeScript/JavaScript compilation, JSX transformation, and optional minification within the Rollup build pipeline.
function esbuild(options?: Options): RollupPlugin;
interface Options {
include?: FilterPattern;
exclude?: FilterPattern;
sourceMap?: boolean;
optimizeDeps?: OptimizeDepsOptions;
tsconfig?: string | false;
loaders?: { [ext: string]: Loader | false };
// Plus all esbuild TransformOptions except 'sourcemap' and 'loader'
minify?: boolean;
minifyWhitespace?: boolean;
minifyIdentifiers?: boolean;
minifySyntax?: boolean;
target?: string | string[];
jsx?: "transform" | "preserve" | "automatic";
jsxFactory?: string;
jsxFragment?: string;
jsxImportSource?: string;
jsxDev?: boolean;
define?: { [key: string]: string };
charset?: "ascii" | "utf8";
treeShaking?: boolean;
ignoreAnnotations?: boolean;
legalComments?: "none" | "inline" | "eof" | "linked" | "external";
keepNames?: boolean;
format?: "iife" | "cjs" | "esm";
globalName?: string;
mangleProps?: RegExp;
reserveProps?: RegExp;
mangleQuoted?: boolean;
mangleCache?: { [key: string]: string | false };
drop?: ("console" | "debugger")[];
dropLabels?: string[];
}
type FilterPattern = string | RegExp | (string | RegExp)[];Standalone minification plugin for projects that only need code compression without transformation or compilation features.
function minify(options?: MinifyOptions): RollupPlugin;
interface MinifyOptions {
sourceMap?: boolean;
// Plus all esbuild TransformOptions except 'sourcemap'
minify?: boolean;
minifyWhitespace?: boolean;
minifyIdentifiers?: boolean;
minifySyntax?: boolean;
target?: string | string[];
charset?: "ascii" | "utf8";
treeShaking?: boolean;
ignoreAnnotations?: boolean;
legalComments?: "none" | "inline" | "eof" | "linked" | "external";
keepNames?: boolean;
format?: "iife" | "cjs" | "esm";
globalName?: string;
mangleProps?: RegExp;
reserveProps?: RegExp;
mangleQuoted?: boolean;
mangleCache?: { [key: string]: string | false };
drop?: ("console" | "debugger")[];
dropLabels?: string[];
}Experimental pre-bundling feature for optimizing external dependencies using esbuild's fast bundling capabilities, eliminating the need for additional CommonJS and Node.js resolution plugins.
interface OptimizeDepsOptions {
include: string[];
exclude?: string[];
cwd: string;
esbuildOptions?: EsbuildBuildOptions;
sourceMap: boolean;
}
interface OptimizeDepsResult {
optimized: Map<string, { file: string }>;
cacheDir: string;
}// Re-export from esbuild for convenience
type Loader =
| "js"
| "jsx"
| "ts"
| "tsx"
| "css"
| "json"
| "text"
| "base64"
| "binary"
| "dataurl";
// Rollup plugin interface
interface RollupPlugin {
name: string;
options?: (opts: InputOptions) => InputOptions | null;
buildStart?: (opts: NormalizedInputOptions) => void;
resolveId?: (id: string, importer?: string) => string | null;
transform?: (code: string, id: string) => TransformResult | null;
renderChunk?: (code: string, chunk: RenderedChunk, options: NormalizedOutputOptions) => TransformResult | null;
}
interface TransformResult {
code: string;
map?: string | SourceMap | null;
}