https://github.com/exuanbo/rollup-plugin-esbuild-transform
Use esbuild with Rollup to transform any supported content types.
https://github.com/exuanbo/rollup-plugin-esbuild-transform
esbuild rollup rollup-plugin rollup-plugin-esbuild rollup-plugin-esbuild-transform
Last synced: 7 months ago
JSON representation
Use esbuild with Rollup to transform any supported content types.
- Host: GitHub
- URL: https://github.com/exuanbo/rollup-plugin-esbuild-transform
- Owner: exuanbo
- License: mit
- Created: 2021-08-23T14:53:48.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2022-12-22T11:18:38.000Z (over 3 years ago)
- Last Synced: 2025-04-06T06:57:04.197Z (about 1 year ago)
- Topics: esbuild, rollup, rollup-plugin, rollup-plugin-esbuild, rollup-plugin-esbuild-transform
- Language: TypeScript
- Homepage:
- Size: 663 KB
- Stars: 12
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome - esbuild-transform - Transform with [esbuild](https://github.com/evanw/esbuild). (Plugins / Transpilation)
README
# rollup-plugin-esbuild-transform
> Use [`esbuild`](https://esbuild.github.io/api/#transform-api) with Rollup to transform any supported content types.
[](https://www.npmjs.com/package/rollup-plugin-esbuild-transform)
[](https://github.com/exuanbo/rollup-plugin-esbuild-transform/actions?query=workflow)
[](https://app.codecov.io/gh/exuanbo/rollup-plugin-esbuild-transform/)
[](https://liberamanifesto.com)
## Why
[`esbuild`](https://esbuild.github.io/api/#build-api) as a bundler has some problems such as [#475](https://github.com/evanw/esbuild/issues/475) which has still not been fixed since Oct, 2020.
[`rollup-plugin-esbuild`](https://github.com/egoist/rollup-plugin-esbuild) is great but there is no simpler way to use multiple `loader` with different options, and for some reason it does not provide all available options from [esbuild transform API](https://esbuild.github.io/api/#transform-api).
## Install
```sh
npm install -D esbuild rollup-plugin-esbuild-transform
```
## Example
```js
// rollup.config.js
import { join } from 'path'
import esbuild from 'rollup-plugin-esbuild-transform'
export default {
// ...
plugins: [
esbuild([
{
loader: 'json'
},
{
loader: 'tsx',
legalComments: 'eof'
},
{
loader: 'ts',
include: /\.tsx?$/,
tsconfig: join(__dirname, 'tsconfig.json')
},
{
output: true,
minify: true,
target: 'es2015'
}
])
]
}
```
## Options
```ts
// index.d.ts
import { TransformOptions as EsbuildTransformOptions } from 'esbuild'
import { FilterPattern } from '@rollup/pluginutils'
import { Plugin } from 'rollup'
export interface TransformOptions extends EsbuildTransformOptions {
tsconfig?: string
}
export interface Options extends TransformOptions {
output?: boolean
include?: FilterPattern
exclude?: FilterPattern
}
declare function esbuildTransform(options?: Options | Options[]): Plugin
export default esbuildTransform
```
This plugin uses the same options from [esbuild transform API](https://esbuild.github.io/api/#transform-api).
`tsconfig` is the path to `tsconfig.json` file relative to `process.cwd()`. It will not be used if `tsconfigRaw` is provided.
`output` is for indicating whether this transformation should be performed after the chunk (bundle) has been rendered.
`include` and `exclude` are [`picomatch`](https://github.com/micromatch/picomatch#globbing-features) patterns. They can be `string | RegExp | Array`. When supplied they will override the default values.
If `output: true`, then the options `include` and `exclude` will be applied to the chunk's filename from `RollupOptions.output.file`.
### `include`
Default to new RegExp(\`\\\\.(?:\${loaderExtensions.join('|')})\$\`) (supports `.cjs`, `.mjs`, `.cts`, `.mts`), or `undefined` (match any filename) if `output: true`.
If a file is matched by more than one pattern (as the example below), the options other than `loader` will be ***shallowly*** merged into and possibly override the previous ones.
```js
// options
[
{
loader: 'tsx',
legalComments: 'eof'
},
{
loader: 'ts',
include: /\.tsx?$/,
tsconfig: join(__dirname, 'tsconfig.json')
}
]
// the final transform options for `index.tsx` will become
{
loader: 'tsx',
legalComments: 'eof',
tsconfig: join(__dirname, 'tsconfig.json')
}
```
### `exclude`
Default to `/node_modules/`, or `undefined` if `output: true`.
It takes priority over `include`.
### Other default options
```js
// output: false | undefined
{
format: options.loader === 'json' ? 'esm' : undefined,
sourcefile: id, // the resolved file path
sourcemap: true,
...options
}
// output: true
{
sourcefile: chunk.fileName,
sourcemap: true,
...options
}
```
## License
[MIT License](https://github.com/exuanbo/rollup-plugin-esbuild-transform/blob/main/LICENSE) © 2021 [Exuanbo](https://github.com/exuanbo)