rolldown-plugin-dts
Version:
A Rolldown plugin to generate and bundle dts files.
237 lines (141 loc) • 8.24 kB
Markdown
# rolldown-plugin-dts
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![Unit Test][unit-test-src]][unit-test-href]
A Rolldown plugin to generate and bundle dts files.
## Install
Requires **`rolldown@1.0.0-beta.9`** or later.
```bash
npm i -D rolldown-plugin-dts
npm i -D typescript # install TypeScript if isolatedDeclarations is not enabled
npm i -D @typescript/native-preview # install TypeScript Go if tsgo is enabled
```
## Usage
Add the plugin to your `rolldown.config.js`:
```js
// rolldown.config.js
import { dts } from 'rolldown-plugin-dts'
export default {
input: './src/index.ts',
plugins: [dts()],
output: [{ dir: 'dist', format: 'es' }],
}
```
You can find an example in [here](./rolldown.config.ts).
## Options
Configuration options for the plugin.
### General Options
#### `cwd`
The directory in which the plugin will search for the `tsconfig.json` file.
#### `dtsInput`
Set to `true` if your entry files are `.d.ts` files instead of `.ts` files.
When enabled, the plugin will skip generating a `.d.ts` file for the entry point.
#### `emitDtsOnly`
If `true`, the plugin will emit only `.d.ts` files and remove all other output chunks.
This is especially useful when generating `.d.ts` files for the CommonJS format as part of a separate build step.
#### `tsconfig`
The path to the `tsconfig.json` file.
- If set to `false`, the plugin will ignore any `tsconfig.json` file.
- You can still specify `compilerOptions` directly in the options.
**Default:** `'tsconfig.json'`
#### `tsconfigRaw`
Pass a raw `tsconfig.json` object directly to the plugin.
See: [TypeScript tsconfig documentation](https://www.typescriptlang.org/tsconfig)
#### `compilerOptions`
Override the `compilerOptions` specified in `tsconfig.json`.
See: [TypeScript compilerOptions documentation](https://www.typescriptlang.org/tsconfig/#compilerOptions)
#### `sourcemap`
If `true`, the plugin will generate declaration maps (`.d.ts.map`) for `.d.ts` files.
#### `resolve`
Controls whether type definitions from `node_modules` are bundled into your final `.d.ts` file or kept as external `import` statements.
By default, dependencies are external, resulting in `import { Type } from 'some-package'`. When bundled, this `import` is removed, and the type definitions from `some-package` are copied directly into your file.
- `true`: Bundles all dependencies.
- `false`: (Default) Keeps all dependencies external.
- `(string | RegExp)[]`: Bundles only dependencies matching the provided strings or regular expressions (e.g. `['pkg-a', /^@scope\//]`).
#### `cjsDefault`
Determines how the default export is emitted.
If set to `true`, and you are only exporting a single item using `export default ...`,
the output will use `export = ...` instead of the standard ES module syntax.
This is useful for compatibility with CommonJS.
#### `banner`
Content to be added at the top of each generated `.d.ts` file.
#### `footer`
Content to be added at the bottom of each generated `.d.ts` file.
### `tsc` Options
> [!NOTE]
> These options are only applicable when `oxc` and `tsgo` are not enabled.
#### `build`
Build mode for the TypeScript compiler:
- If `true`, the plugin will use [`tsc -b`](https://www.typescriptlang.org/docs/handbook/project-references.html#build-mode-for-typescript) to build the project and all referenced projects before emitting `.d.ts` files.
- If `false`, the plugin will use [`tsc`](https://www.typescriptlang.org/docs/handbook/compiler-options.html) to emit `.d.ts` files without building referenced projects.
**Default:** `false`
#### `incremental`
Controls how project references and incremental builds are handled:
- If `incremental` is `true`, all built files (including [`.tsbuildinfo`](https://www.typescriptlang.org/tsconfig/#tsBuildInfoFile)) will be written to disk, similar to running `tsc -b` in your project.
- If `incremental` is `false`, built files are kept in memory, minimizing disk usage.
Enabling this option can speed up builds by caching previous results, which is helpful for large projects with multiple references.
**Default:** `true` if your `tsconfig` has [`incremental`](https://www.typescriptlang.org/tsconfig/#incremental) or [`tsBuildInfoFile`](https://www.typescriptlang.org/tsconfig/#tsBuildInfoFile) enabled.
#### `vue`
If `true`, the plugin will generate `.d.ts` files using `vue-tsc`.
#### `parallel`
If `true`, the plugin will launch a separate process for `tsc` or `vue-tsc`, enabling parallel processing of multiple projects.
#### `eager`
If `true`, the plugin will prepare all files listed in `tsconfig.json` for `tsc` or `vue-tsc`.
This is especially useful when you have a single `tsconfig.json` for multiple projects in a monorepo.
#### `newContext`
If `true`, the plugin will create a new isolated context for each build,
ensuring that previously generated `.d.ts` code and caches are not reused.
By default, the plugin may reuse internal caches or incremental build artifacts
to speed up repeated builds. Enabling this option forces a clean context,
guaranteeing that all type definitions are generated from scratch.
`invalidateContextFile` API can be used to clear invalidated files from the context.
```ts
import { globalContext, invalidateContextFile } from 'rolldown-plugin-dts/tsc'
invalidateContextFile(globalContext, 'src/foo.ts')
```
#### `emitJs`
If `true`, the plugin will emit `.d.ts` files for `.js` files as well.
This is useful when you want to generate type definitions for JavaScript files with JSDoc comments.
Enabled by default when `allowJs` in compilerOptions is `true`.
### Oxc
#### `oxc`
If `true`, the plugin will generate `.d.ts` files using [Oxc](https://oxc.rs/docs/guide/usage/transformer.html), which is significantly faster than the TypeScript compiler.
This option is automatically enabled when `isolatedDeclarations` in `compilerOptions` is set to `true`.
### TypeScript Go
> [!WARNING]
> This feature is experimental and not yet recommended for production environments.
#### `tsgo`
**[Experimental]** Enables DTS generation using [`tsgo`](https://github.com/microsoft/typescript-go).
To use this option, ensure that `@typescript/native-preview` is installed as a dependency.
`tsconfigRaw` and `compilerOptions` options will be ignored when this option is enabled.
## Differences from `rollup-plugin-dts`
### Isolated Declarations
The plugin leverages Oxc's `isolatedDeclarations` to generate `.d.ts` files when `isolatedDeclarations` is enabled,
offering significantly faster performance compared to the `typescript` compiler.
### Single Build for ESM
`rolldown-plugin-dts` generates separate chunks for `.d.ts` files, enabling both source code (`.js`)
and type definition files (`.d.ts`) to be produced in a single build process.
However, this functionality is limited to ESM output format. Consequently,
**two** distinct build processes are required for CommonJS source code (`.cjs`)
and its corresponding type definition files (`.d.cts`).
In such cases, the `emitDtsOnly` option can be particularly helpful.
## Credits
The project is inspired by [rollup-plugin-dts](https://github.com/Swatinem/rollup-plugin-dts)
but has been independently implemented.
We extend our gratitude to the original creators for their contributions.
Furthermore, the test suite is authorized by them and distributed under the MIT license.
## Sponsors
<p align="center">
<a href="https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg">
<img src='https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg'/>
</a>
</p>
## License
[MIT](./LICENSE) License © 2025-PRESENT [Kevin Deng](https://github.com/sxzz)
<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/rolldown-plugin-dts.svg
[npm-version-href]: https://npmjs.com/package/rolldown-plugin-dts
[npm-downloads-src]: https://img.shields.io/npm/dm/rolldown-plugin-dts
[npm-downloads-href]: https://www.npmcharts.com/compare/rolldown-plugin-dts?interval=30
[unit-test-src]: https://github.com/sxzz/rolldown-plugin-dts/actions/workflows/unit-test.yml/badge.svg
[unit-test-href]: https://github.com/sxzz/rolldown-plugin-dts/actions/workflows/unit-test.yml