@rollup/plugin-typescript
🍣 A Rollup plugin for seamless integration between Rollup and Typescript.
Requirements
This plugin requires an LTS Node version (v8.0.0+) and Rollup v1.20.0+. Due to the use of tslib to inject helpers, this plugin requires at least TypeScript 2.1. See also here.
Install
Using npm:
npm install @rollup/plugin-typescript --save-devNote that both typescript and tslib are peer dependencies of this plugin that need to be installed separately.
Why?
See rollup-plugin-babel.
Usage
Create a rollup.config.js configuration file and import the plugin:
// rollup.config.js; input: 'src/index.ts' output: dir: 'output' format: 'cjs' plugins: ;Then call rollup either via the CLI or the API.
Options
The plugin loads any compilerOptions from the tsconfig.json file by default. Passing options to the plugin directly overrides those options:
... input: './main.ts' plugins: The following options are unique to rollup-plugin-typescript:
exclude
Type: String | Array[...String]
Default: null
A minimatch pattern, or array of patterns, which specifies the files in the build the plugin should ignore. By default no files are ignored.
include
Type: String | Array[...String]
Default: null
A minimatch pattern, or array of patterns, which specifies the files in the build the plugin should operate on. By default all .ts and .tsx files are targeted.
tsconfig
Type: String | Boolean
Default: true
When set to false, ignores any options specified in the config file. If set to a string that corresponds to a file path, the specified file will be used as config file.
typescript
Type: import('typescript')
Default: peer dependency
Overrides the TypeScript module used for transpilation.
;tslib
Type: String
Default: peer dependency
Overrides the injected TypeScript helpers with a custom version.
;Typescript compiler options
Some of Typescript's CompilerOptions affect how Rollup builds files.
noEmitOnError
Type: Boolean
Default: true
If a type error is detected, the Rollup build is aborted when this option is set to true.
files, include, exclude
Type: Array[...String]
Default: []
Declaration files are automatically included if they are listed in the files field in your tsconfig.json file. Source files in these fields are ignored as Rollup's configuration is used instead.
Ignored options
These compiler options are ignored by Rollup:
declaration,declarationMap: This plugin currently cannot emit declaration files.incremental,tsBuildInfoFile: This plugin currently does not support incremental compilation using Typescript.noEmitHelpers,importHelpers: Thetslibhelper module always must be used.noEmit,emitDeclarationOnly: Typescript needs to emit code for the plugin to work with.noResolve: Preventing Typescript from resolving code may break compilation
Importing CommonJS
Though it is not recommended, it is possible to configure this plugin to handle imports of CommonJS files from TypeScript. For this, you need to specify CommonJS as the module format and add rollup-plugin-commonjs to transpile the CommonJS output generated by TypeScript to ES Modules so that rollup can process it.
// rollup.config.js;; input: './main.ts' plugins: // the ".ts" extension is required ;Note that this will often result in less optimal output.
Preserving JSX output
Whenever choosing to preserve JSX output to be further consumed by another transform step via tsconfig compilerOptions by setting jsx: 'preserve' or overriding options, please bear in mind that, by itself, this plugin won't be able to preserve JSX output, usually failing with:
[!] Error: Unexpected token file.tsx 1: export default <span>Foobar</span> ^To prevent that, make sure to use the acorn plugin, namely acorn-jsx, which will make Rollup's parser acorn handle JSX tokens. (See https://rollupjs.org/guide/en/#acorninjectplugins)
After adding acorn-jsx plugin, your Rollup config would look like the following, correctly preserving your JSX output.
;; // … other options … acornInjectPlugins: plugins: ;Faster compiling
Previous versions of this plugin used Typescript's transpileModule API, which is faster but does not perform typechecking and does not support cross-file features like const enums and emit-less types. If you want this behaviour, you can use @rollup/plugin-sucrase instead.