https://github.com/solidjs-community/tsup-preset-solid
Preset for building your SolidJS packages with tsup.
https://github.com/solidjs-community/tsup-preset-solid
esbuild solidjs tsup typescript
Last synced: 5 months ago
JSON representation
Preset for building your SolidJS packages with tsup.
- Host: GitHub
- URL: https://github.com/solidjs-community/tsup-preset-solid
- Owner: solidjs-community
- License: mit
- Created: 2023-01-15T16:43:20.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-16T14:46:37.000Z (over 1 year ago)
- Last Synced: 2025-04-20T06:30:15.885Z (6 months ago)
- Topics: esbuild, solidjs, tsup, typescript
- Language: TypeScript
- Homepage:
- Size: 275 KB
- Stars: 31
- Watchers: 3
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
# tsup-preset-solid
[](https://pnpm.io/)
[](https://www.npmjs.com/package/tsup-preset-solid)
[](https://www.npmjs.com/package/tsup-preset-solid)Preset for building your SolidJS packages with ease using [**tsup**](https://tsup.egoist.dev) _(powered by [**esbuild**](https://esbuild.github.io))_.
## Features
- **Preconfigured** - Just install, set your entries and you're done.
- **Fast** - Uses [**esbuild**](https://esbuild.github.io) under the hood.
- **SolidStart support** - Includes `solid` export condition with preserved JSX.
- **Best practices** - Ensures that the built library works well with Solid's tooling ecosystem.
- **Development and server entries** - Creates a separate entry for development, server-side rendering and production form a single source.
- **Multiple entries** - Supports multiple package entries. _(submodules)_
- **Automatic package.json configuration** - Automatically writes export fields to `package.json` based on passed options.
> **Warning** This preset is tailored towards a specific usage, mainly for primitives libraries or small headless libraries, so diverging from the happy path may cause unexpected results. [Please report any issues you find.](https://github.com/solidjs-community/tsup-preset-solid/issues)
## Quick start
### Install it:
```bash
npm i -D tsup tsup-preset-solid
# or
pnpm add -D tsup tsup-preset-solid
# or
yarn add -D tsup tsup-preset-solid
```### Add it to your `tsup.config.ts`
```ts
// tsup.config.ts
import { defineConfig } from 'tsup'
import * as preset from 'tsup-preset-solid'const preset_options: preset.PresetOptions = {
// array or single object
entries: [
// default entry (index)
{
// entries with '.tsx' extension will have `solid` export condition generated
entry: 'src/index.tsx',
// set `true` or pass a specific path to generate a development-only entry
dev_entry: 'src/dev.tsx',
// set `true` or pass a specific path to generate a server-only entry
server_entry: true,
},
{
// non-default entries with "index" filename should have a name specified
name: 'additional',
entry: 'src/additional/index.ts',
dev_entry: true,
},
{
entry: 'src/shared.ts',
},
],
// Set to `true` to remove all `console.*` calls and `debugger` statements in prod builds
drop_console: true,
// Set to `true` to generate a CommonJS build alongside ESM
cjs: false,
}export default defineConfig(config => {
const watching = !!config.watchconst parsed_data = preset.parsePresetOptions(preset_options, watching)
if (!watching) {
const package_fields = preset.generatePackageExports(parsed_data)console.log(`\npackage.json: \n${JSON.stringify(package_fields, null, 2)}\n\n`)
/*
will update ./package.json with the correct export fields
*/
preset.writePackageJson(package_fields)
}return preset.generateTsupOptions(parsed_data)
})
```### Add required fields and scripts to your `package.json`
```json
{
"type": "module",
"files": ["dist"],
"scripts": {
"build": "tsup",
"dev": "tsup --watch"
}
}
```## Usage gotchas
1. **`solid` export condition**
This preset will automatically add `solid` export condition to your `package.json` if you have any `.tsx` entry files. This is required for SolidStart to work properly.
2. **"type": "module"**
This preset requires your package to be a module.
3. **Needs ESM**
This preset requires your package to be ESM. If you want to support CJS additionally, you can set `cjs: true` in the options. Other export format are not supported.
4. **development-only `solid` export issue**
Currently SolidStart has an issue with `development` and `solid` export condition. ([solid-start issue](https://github.com/solidjs/solid-start/issues/651))
This can be "fixed" by overriding the `@rollup/plugin-node-resolve` dependency in your `package.json`:
```json
{
"pnpm": {
"overrides": {
"@rollup/plugin-node-resolve": "13.3.0"
}
}
}
```