203 lines
4.6 KiB
Markdown
203 lines
4.6 KiB
Markdown
---
|
|
name: tooling-setup
|
|
description: Configure Vite, TypeScript, Biome, and Vitest for React 19 projects. Covers build configuration, strict TypeScript setup, linting/formatting, and testing infrastructure. Use when setting up new projects or updating tool configurations.
|
|
---
|
|
|
|
# Tooling Setup for React 19 Projects
|
|
|
|
Production-ready configuration for modern frontend tooling with Vite, TypeScript, Biome, and Vitest.
|
|
|
|
## 1. Vite + React 19 + React Compiler
|
|
|
|
```typescript
|
|
// vite.config.ts
|
|
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react({
|
|
babel: {
|
|
// React Compiler must run first:
|
|
plugins: ['babel-plugin-react-compiler'],
|
|
},
|
|
}),
|
|
],
|
|
})
|
|
```
|
|
|
|
**Verify:** Check DevTools for "Memo ✨" badge on optimized components.
|
|
|
|
## 2. TypeScript (strict + bundler mode)
|
|
|
|
```json
|
|
// tsconfig.json
|
|
{
|
|
"compilerOptions": {
|
|
"target": "ES2020",
|
|
"module": "ESNext",
|
|
"moduleResolution": "bundler",
|
|
"jsx": "react-jsx",
|
|
"verbatimModuleSyntax": true,
|
|
"isolatedModules": true,
|
|
"strict": true,
|
|
"noUncheckedIndexedAccess": true,
|
|
"exactOptionalPropertyTypes": true,
|
|
"noFallthroughCasesInSwitch": true,
|
|
"types": ["vite/client", "vitest"]
|
|
},
|
|
"include": ["src", "vitest-setup.ts"]
|
|
}
|
|
```
|
|
|
|
**Key Settings:**
|
|
- `moduleResolution: "bundler"` - Optimized for Vite
|
|
- `strict: true` - Enable all strict type checks
|
|
- `noUncheckedIndexedAccess: true` - Safer array/object access
|
|
- `verbatimModuleSyntax: true` - Explicit import/export
|
|
|
|
## 3. Biome (formatter + linter)
|
|
|
|
```bash
|
|
npx @biomejs/biome init
|
|
npx @biomejs/biome check --write .
|
|
```
|
|
|
|
```json
|
|
// biome.json
|
|
{
|
|
"formatter": { "enabled": true, "lineWidth": 100 },
|
|
"linter": {
|
|
"enabled": true,
|
|
"rules": {
|
|
"style": { "noUnusedVariables": "error" }
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Usage:**
|
|
- `npx biome check .` - Check for issues
|
|
- `npx biome check --write .` - Auto-fix issues
|
|
- Replaces ESLint + Prettier with one fast tool
|
|
|
|
## 4. Environment Variables
|
|
|
|
- Read via `import.meta.env`
|
|
- Prefix all app-exposed vars with `VITE_`
|
|
- Never place secrets in the client bundle
|
|
|
|
```typescript
|
|
// Access environment variables
|
|
const apiUrl = import.meta.env.VITE_API_URL
|
|
const isDev = import.meta.env.DEV
|
|
const isProd = import.meta.env.PROD
|
|
|
|
// .env.local (not committed)
|
|
VITE_API_URL=https://api.example.com
|
|
VITE_ANALYTICS_ID=UA-12345-1
|
|
```
|
|
|
|
## 5. Testing Setup (Vitest)
|
|
|
|
```typescript
|
|
// vitest-setup.ts
|
|
import '@testing-library/jest-dom/vitest'
|
|
|
|
// vitest.config.ts
|
|
import { defineConfig } from 'vitest/config'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
test: {
|
|
environment: 'jsdom',
|
|
setupFiles: ['./vitest-setup.ts'],
|
|
coverage: { reporter: ['text', 'html'] }
|
|
}
|
|
})
|
|
```
|
|
|
|
**Setup Notes:**
|
|
- Use React Testing Library for DOM assertions
|
|
- Use MSW for API mocks (see **tanstack-query** skill for MSW patterns)
|
|
- Add `types: ["vitest", "vitest/jsdom"]` for jsdom globals in tsconfig.json
|
|
|
|
**Run Tests:**
|
|
```bash
|
|
npx vitest # Run in watch mode
|
|
npx vitest run # Run once
|
|
npx vitest --coverage # Generate coverage report
|
|
```
|
|
|
|
## Package Installation
|
|
|
|
```bash
|
|
# Core
|
|
pnpm add react@rc react-dom@rc
|
|
pnpm add -D vite @vitejs/plugin-react typescript
|
|
|
|
# Biome (replaces ESLint + Prettier)
|
|
pnpm add -D @biomejs/biome
|
|
|
|
# React Compiler
|
|
pnpm add -D babel-plugin-react-compiler
|
|
|
|
# Testing
|
|
pnpm add -D vitest @testing-library/react @testing-library/jest-dom
|
|
pnpm add -D @testing-library/user-event jsdom
|
|
pnpm add -D msw
|
|
|
|
# TanStack
|
|
pnpm add @tanstack/react-query @tanstack/react-router
|
|
pnpm add -D @tanstack/router-plugin @tanstack/react-query-devtools
|
|
|
|
# Utilities
|
|
pnpm add axios zod
|
|
```
|
|
|
|
## Project Scripts
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc --noEmit && vite build",
|
|
"preview": "vite preview",
|
|
"test": "vitest",
|
|
"test:run": "vitest run",
|
|
"test:coverage": "vitest --coverage",
|
|
"lint": "biome check .",
|
|
"lint:fix": "biome check --write .",
|
|
"format": "biome format --write ."
|
|
}
|
|
}
|
|
```
|
|
|
|
## IDE Setup
|
|
|
|
**VSCode Extensions:**
|
|
- Biome (biomejs.biome)
|
|
- TypeScript (built-in)
|
|
- Vite (antfu.vite)
|
|
|
|
**VSCode Settings:**
|
|
```json
|
|
{
|
|
"editor.defaultFormatter": "biomejs.biome",
|
|
"editor.formatOnSave": true,
|
|
"[typescript]": {
|
|
"editor.defaultFormatter": "biomejs.biome"
|
|
},
|
|
"[typescriptreact]": {
|
|
"editor.defaultFormatter": "biomejs.biome"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Related Skills
|
|
|
|
- **core-principles** - Project structure and best practices
|
|
- **react-patterns** - React 19 specific features
|
|
- **testing-strategy** - Advanced testing patterns with MSW
|