Rollup plugin that compiles TypeScript, Flow, JSX, and other modern JavaScript syntax using Sucrase for fast compilation
npx @tessl/cli install tessl/npm-rollup--plugin-sucrase@5.0.0A Rollup plugin that compiles TypeScript, Flow, JSX, and other modern JavaScript syntax using Sucrase for fast compilation. Sucrase is a fast alternative to Babel for transforming modern JavaScript, providing high-performance bundling workflows while maintaining compatibility with Rollup's plugin ecosystem.
npm install @rollup/plugin-sucrase --save-devimport sucrase from '@rollup/plugin-sucrase';CommonJS:
const sucrase = require('@rollup/plugin-sucrase');import { rollup } from 'rollup';
import sucrase from '@rollup/plugin-sucrase';
import resolve from '@rollup/plugin-node-resolve';
export default {
input: 'src/index.ts',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
plugins: [
resolve({
extensions: ['.js', '.ts']
}),
sucrase({
exclude: ['node_modules/**'],
transforms: ['typescript']
})
]
};Creates a Rollup plugin instance configured for Sucrase transformations.
/**
* Creates a Rollup plugin for compiling modern JavaScript/TypeScript with Sucrase
* @param options - Configuration options for the plugin
* @returns Rollup plugin instance
*/
function sucrase(options?: RollupSucraseOptions): Plugin;Usage Examples:
// Basic TypeScript compilation
sucrase({
transforms: ['typescript']
})
// JSX with custom pragma
sucrase({
transforms: ['jsx'],
jsxPragma: 'React.createElement',
jsxFragmentPragma: 'React.Fragment'
})
// TypeScript + JSX (TSX files)
sucrase({
transforms: ['typescript', 'jsx']
})
// With file filtering
sucrase({
transforms: ['typescript'],
include: ['src/**/*.ts'],
exclude: ['node_modules/**', '**/*.test.ts']
})
// Production optimizations
sucrase({
transforms: ['typescript'],
production: true,
enableLegacyTypeScriptModuleInterop: false
})
// Jest test compilation
sucrase({
transforms: ['typescript', 'jest']
})
// ES6 to CommonJS conversion
sucrase({
transforms: ['imports'],
production: true
})interface RollupSucraseOptions {
/**
* Array of transform types to apply
* Supported values: 'typescript', 'jsx', 'flow', 'imports', 'react-hot-loader', 'jest'
*/
transforms?: string[];
/**
* Custom JSX pragma function name
* @default 'React.createElement'
*/
jsxPragma?: string;
/**
* Custom JSX fragment pragma
* @default 'React.Fragment'
*/
jsxFragmentPragma?: string;
/**
* Enable legacy TypeScript module interoperability
* @default false
*/
enableLegacyTypeScriptModuleInterop?: boolean;
/**
* Enable legacy Babel 5 module interoperability
* @default false
*/
enableLegacyBabel5ModuleInterop?: boolean;
/**
* Enable production mode optimizations
* @default false
*/
production?: boolean;
/**
* Disable ES module transforms
* @default false
*/
disableESTransforms?: boolean;
/**
* Picomatch pattern or array of patterns specifying files to include
* @default null (all files)
*/
include?: FilterPattern;
/**
* Picomatch pattern or array of patterns specifying files to exclude
* @default null (no files excluded)
*/
exclude?: FilterPattern;
}The transforms option accepts an array of the following transform types:
'typescript': Compiles TypeScript syntax, removes type annotations'jsx': Transforms JSX syntax to JavaScript function calls'flow': Removes Flow type annotations'imports': Transforms ES6 import/export statements to CommonJS'react-hot-loader': Enables advanced hot reloading for React components'jest': Hoists Jest method calls (like jest.mock()) above imports for proper test executionCommon combinations:
['typescript'] - TypeScript files (.ts)['jsx'] - JSX files (.jsx)['typescript', 'jsx'] - TypeScript + JSX files (.tsx)['flow'] - Flow-typed JavaScript files['typescript', 'jest'] - TypeScript test files with Jest['imports'] - ES6 modules to CommonJS conversionThe plugin automatically resolves TypeScript imports with the following extension priority:
{path}.ts{path}.tsx{path}/index.ts{path}/index.tsxFor imports ending in .js, it also checks:
{path}.ts (replacing .js with .ts){path}.tsx (replacing .js with .tsx)This allows you to import TypeScript files using .js extensions, which TypeScript expects for ES module compatibility.
/**
* Rollup plugin interface
*/
interface Plugin {
name: string;
resolveId?(importee: string, importer?: string): string | null | undefined;
transform?(code: string, id: string): { code: string; map: any } | null;
}
/**
* File filtering pattern type from @rollup/pluginutils
*/
type FilterPattern = string | RegExp | Array<string | RegExp> | null;The plugin handles transformation errors by:
undefined, allowing other plugins to handle resolution