Advanced Vite 7+ patterns including Environment API, plugin development, SSR configuration, library mode, and build optimization. Use when customizing build pipelines, creating plugins, or configuring multi-environment builds.
View on GitHubyonatangross/skillforge-claude-plugin
ork-frontend-performance
plugins/ork-frontend-performance/skills/vite-advanced/SKILL.md
January 25, 2026
Select agents to install to:
npx add-skill https://github.com/yonatangross/skillforge-claude-plugin/blob/main/plugins/ork-frontend-performance/skills/vite-advanced/SKILL.md -a claude-code --skill vite-advancedInstallation paths:
.claude/skills/vite-advanced/# Vite Advanced Patterns
Advanced configuration for Vite 7+ including Environment API.
## Vite 7 Environment API (Key 2026 Feature)
Multi-environment support is now first-class:
```typescript
import { defineConfig } from 'vite'
export default defineConfig({
environments: {
// Browser client
client: {
build: {
outDir: 'dist/client',
manifest: true,
},
},
// Node.js SSR
ssr: {
build: {
outDir: 'dist/server',
target: 'node20',
},
},
// Edge runtime (Cloudflare, etc.)
edge: {
resolve: {
noExternal: true,
conditions: ['edge', 'worker'],
},
build: {
outDir: 'dist/edge',
},
},
},
})
```
**Key Changes:**
- Environments have their own module graph
- Plugins access `this.environment` in hooks
- `createBuilder` API for coordinated builds
- Node.js 20.19+ or 22.12+ required
## Plugin Development
Basic plugin structure:
```typescript
export function myPlugin(): Plugin {
return {
name: 'my-plugin',
// Called once when config is resolved
configResolved(config) {
// Access resolved config
},
// Transform individual modules
transform(code, id) {
// this.environment available in Vite 7+
if (id.endsWith('.special')) {
return { code: transformCode(code) }
}
},
// Virtual modules
resolveId(id) {
if (id === 'virtual:my-module') {
return '\0virtual:my-module'
}
},
load(id) {
if (id === '\0virtual:my-module') {
return 'export const value = "generated"'
}
},
}
}
```
## SSR Configuration
Development (middleware mode):
```typescript
import { createServer } from 'vite'
const vite = await createServer({
server: { middlewareMode: true },
appType: 'custom',
})
app.use('*', async (req, res) => {
const url = req.originalUrl
let template = fs.readFileSync('index.html', 'utf-8')
template = await vite.transformI