Die Vite-Build-Einrichtung ist der Höhepunkt mehrerer Versuche, ESM und CJS für TanStack-Projekte dual zu veröffentlichen und gleichzeitig die Kompatibilität mit allen TypeScript-Modulauflösungsoptionen zu erhalten.
ES Modules (ESM) ist der Standard für das Schreiben von JavaScript-Modulen. Aufgrund der historischen Abhängigkeit von CommonJS (CJS) waren jedoch viele Ökosystem-Tools und Projekte anfangs nicht mit ESM kompatibel. Dies ist immer seltener der Fall, und ich möchte Sie bitten zu prüfen, ob es überhaupt notwendig ist, CJS-Code zu verteilen. Sindre Sorhus hat eine gute Zusammenfassung dieses Problems hier.
Die Build-Konfiguration ist recht eigenwillig, da sie für die Arbeit mit unseren internen Bibliotheken konzipiert ist. Wenn Sie die folgenden Anweisungen befolgen, funktioniert sie möglicherweise auch für Ihre Bibliothek!
{
"exports": {
".": {
"import": {
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/cjs/index.d.cts",
"default": "./dist/cjs/index.cjs"
}
},
"./package.json": "./package.json"
}
}
{
"exports": {
".": {
"import": {
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/cjs/index.d.cts",
"default": "./dist/cjs/index.cjs"
}
},
"./package.json": "./package.json"
}
}
import { defineConfig, mergeConfig } from 'vite'
import { tanstackViteConfig } from '@tanstack/config/vite'
// OR
import { tanstackViteConfig } from '@tanstack/vite-config'
const config = defineConfig({
// Framework plugins, vitest config, etc.
})
export default mergeConfig(
config,
tanstackViteConfig({
entry: './src/index.ts',
srcDir: './src',
}),
)
import { defineConfig, mergeConfig } from 'vite'
import { tanstackViteConfig } from '@tanstack/config/vite'
// OR
import { tanstackViteConfig } from '@tanstack/vite-config'
const config = defineConfig({
// Framework plugins, vitest config, etc.
})
export default mergeConfig(
config,
tanstackViteConfig({
entry: './src/index.ts',
srcDir: './src',
}),
)
Diese Konfiguration funktioniert zwar mit den meisten Frameworks mit einem Vite-Adapter, bedeutet aber nicht, dass Sie sie für alle Frameworks verwenden sollten, da viele ihre eigenen Build-Tools haben, die für ihr Ökosystem optimiert sind. Wenn ein Framework-spezifisches Build-Tool existiert, sollte dieses bevorzugt werden.
| Framework | Empfehlung |
|---|---|
| Angular | ng-packagr (offizielles Werkzeug) |
| React | @tanstack/config (nur wenn Sie dual ESM/CJS benötigen) |
| Solid | tsc (erhält JSX, notwendig für SSR) |
| Svelte | @sveltejs/package (offizielles Werkzeug) |
| Vue | @tanstack/config (nur wenn Sie dual ESM/CJS benötigen) |
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.