Turbopack Cheatsheet¶
__HTML_TAG_69_Turbopack - The Incremental Bundler__HTML_TAG_70_
__HTML_TAG_71_
Turbopack è un bundler incrementale ottimizzato per JavaScript e TypeScript, scritto in Rust. Creato da Vercel, è progettato per essere il successore di Webpack con 10x aggiornamenti più veloci di Vite e 700x più veloce di Webpack.
Traduzione:
__HTML_TAG_73_
__HTML_TAG_74_
__HTML_TAG_79_
__HTML_TAG_80_
## Tavola dei contenuti
- [Introduzione](#introduzione)
- [Installazione](#installazione)
[Getting Started](#getting-started)
[Next.js Integration](#nextjs-integration)
- [Configurazione](#configurazione)
- [Server di sviluppo](#server di sviluppo)
- [Processo di costruzione](#build-process)
- [Asset Handling](#asset-handling)
- [CSS Support](#css-support)
- [TypeScript Support](#typescript-support)
- [variabili ambientali](#variabili ambientali)
[Plugins](#plugins)
- [Performance](#performance)
- (Migrazione)
- [Troubleshooting](#troubleshooting)
[Le migliori pratiche](#best-practices)
## Introduzione
# Cos'è Turbopack?
Turbopack è un bundler incrementale ottimizzato per JavaScript e TypeScript, scritto in Rust dai creatori di Webpack e Next.js. Rappresenta un cambiamento fondamentale nel funzionamento dei bundlers, concentrandosi sul calcolo incrementale per raggiungere velocità senza precedenti.
# Caratteristiche chiave
- ** Computazione ambientale ** Solo i processi che sono cambiati
- **Rust Performance**: Costruito in ruggine per la massima velocità
- **Hot Module Sostituzione**: Aggiornamenti istantanei durante lo sviluppo
- **Framework Agnostic**: Funziona con qualsiasi framework JavaScript
- **Next.js Integrazione ** Supporto di prima classe per le applicazioni Next.js
- **TypeScript Native**: Supporto TypeScript integrato senza configurazione
### Performance Benchmarks
## Installazione
### Next.js Integration (Consigliato)
Traduzione:
### Existing Next.js Project
Traduzione:
### Installazione standalone (Alpha)
Traduzione:
## Verifica l'installazione
Traduzione:
#
### Basic Next.js Setup con Turbopack
Traduzione:
### Struttura del progetto
Traduzione:
# Configurazione di base
Traduzione:
### First Component
Traduzione:
## Next.js Integrazione
### App Router with Turbopack
Traduzione:
## Pages Router with Turbopack
Traduzione:
### API Routes
Traduzione:
## Configurazione
# Configurazione Turbopack di base
Traduzione:
### Configurazione avanzata
Traduzione:
### Configurazione script
Traduzione:
## Development Server
## Start Development Server
Traduzione:
### Opzioni del server di sviluppo
Traduzione:
### sostituzione del modulo caldo
Traduzione:
### Development Debugging
Traduzione:
## Processo di costruzione
### Production Build
Traduzione:
## # Configurazione di compilazione
Traduzione:
## # Build Analysis
Traduzione:
### Custom Build Scripts
Traduzione:
## Asset Handling
### Asset statici
Traduzione:
### SVG Manipolazione
Traduzione:
### Font Caricamento
Traduzione:
### Importazioni dinamiche
Traduzione:
## CSS Support
## Tailwind CSS
Traduzione:
### Modulo CSS
#
### Styled Components
Traduzione:
### Sass/SCSS Supporto
Traduzione:
## Supporto TypeScript
### Configurazione script
Traduzione:
### Tipo Definizioni
Traduzione:
### Componenti digitati
Traduzione:
### Ganci personalizzati con TypeScript
Traduzione:
## Variabili dell'ambiente
### Configurazione dell'ambiente
Traduzione:
#### Utilizzo delle variabili ambientali
Traduzione:
### Configurazione runtime
Traduzione:
# Plugin #
### Supporto Plugin corrente
Traduzione:
### Webpack Plugins (Fallback)
Traduzione:
## # Future Plugin System
Traduzione:
## Performance
### Performance Benchmarks
Traduzione:
### Performance Monitoring
Traduzione:
### Analisi Bundle
__________
# Migrazione #
### Da Webpack a Turbopack
Traduzione:
### Migration Checklist
[ ] Aggiornamento Next.js alla versione 13.5+
- Cosa? Aggiungi `--turbo` flag to dev script
- Cosa? Testare tutte le caratteristiche nello sviluppo
- Cosa? Aggiornamento configurazione webpack personalizzata
- Cosa? Verificare che tutti i caricatori funzionino correttamente
- Cosa? Prova sostituzione del modulo caldo
- Cosa? Verificare la compatibilità del processo
### Problemi comuni di migrazione
Traduzione:
### Migrazione graduale
Traduzione:
## Risoluzione dei problemi
### Questioni comuni
##### Turbopack Not Start
Traduzione:
#### Problema di risoluzione del modulo
Traduzione:
#### Hot Reload Not Working
Traduzione:
#### Costruire errori
Traduzione:
## Debug Configuration
Traduzione:
# Migliori Pratiche
### Struttura del progetto
Traduzione:
## Performance Best Practices
- ** Utilizzare Turbopack per lo sviluppo** per ottenere i massimi vantaggi di velocità
- **Implementare un codice corretto di divisione** con importazioni dinamiche
- **Ottimizzare le immagini** con il componente Next.js Image
- **Utilizzare TypeScript** per una migliore esperienza di sviluppo
- ** Dimensione del fascio del motorino** con l'analizzatore del fascio
### Migliori pratiche di sviluppo
- **Start with `--turbo`___ flag** per lo sviluppo
- ** Utilizzare le importazioni assolute ** con gli alias del percorso
- **Attuazione dei limiti di errore appropriati* *
# Usare DevTools # # per il debug #
-**Test hot reload** funzionalità regolarmente
### Le migliori pratiche di produzione
- **Test costruisce ** prima della distribuzione
- * Performance motoria** metriche
- ** Utilizzare variabili di ambiente** per la configurazione
- **Implementa le strategie corrette di caching**
- ** Dimensione del fascio del motorino** e prestazioni
---
## Sommario
Turbopack rappresenta il futuro del bundling JavaScript con il suo approccio incrementale e le prestazioni potenziate da Rust. Le caratteristiche principali includono:
- "Incremental Bundling" Solo i processi cambiati file per la massima velocità
- **Rust Performance**: Costruito in ruggine per aggiornamenti 10x più veloci di Vite
- **Next.js Integrazione ** Supporto di prima classe per le applicazioni Next.js
- **Hot Module Sostituzione**: Aggiornamenti istantanei durante lo sviluppo
- **TypeScript Native**: Supporto TypeScript integrato senza configurazione
- **Framework Agnostic**: Funziona con qualsiasi framework JavaScript
- **Future-Proof**: Progettato per sostituire Webpack come bundle standard
Con l'adozione di Turbopack, è possibile migliorare significativamente la vostra esperienza di sviluppo con build più veloci, reload caldi istantanei, e un flusso di lavoro di sviluppo più reattivo.
__HTML_TAG_81_
copia funzioneToClipboard() {}
const commands = document.querySelectorAll('code');
tutti i Comandi = '';
comandi. per ogni(cmd => AllCommands += cmd.textContent + '\n');
navigatore.clipboard.writeText(tutti iComandi);
alert('Tutti i comandi copiati a clipboard!');
#
funzione generaPDF() {
finestra.print();
#
Traduzione:
# Turbopack vs other bundlers (startup time)
Turbopack: ~1.8s
Vite: ~11.4s
Webpack: ~16.5s
# Hot updates
Turbopack: ~6ms
Vite: ~30ms
Webpack: ~612ms
// app/page.tsx
import Counter from './components/Counter'
import Link from 'next/link'
export default function Home() {
return (
<div className="space-y-8">
<h1 className="text-4xl font-bold text-center">
Welcome to Turbopack
</h1>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
<div className="space-y-4">
<h2 className="text-2xl font-semibold">Features</h2>
<ul className="list-disc list-inside space-y-2">
<li>⚡ Lightning fast HMR</li>
<li>🦀 Built in Rust</li>
<li>📦 Incremental bundling</li>
<li>🔥 Hot module replacement</li>
</ul>
</div>
<Counter />
</div>
<div className="text-center">
<Link
href="/about"
className="text-blue-500 hover:text-blue-700 underline"
>
Learn more about Turbopack
</Link>
</div>
</div>
)
}
// pages/index.tsx
import { useState } from 'react'
import Head from 'next/head'
export default function Home() {
const [message, setMessage] = useState('Hello Turbopack!')
return (
<>
<Head>
<title>Turbopack Demo</title>
<meta name="description" content="Turbopack demonstration" />
</Head>
<div className="container mx-auto px-4 py-8">
<h1 className="text-4xl font-bold mb-8">{message}</h1>
<button
onClick={() => setMessage('Turbopack is fast!')}
className="px-6 py-3 bg-green-500 text-white rounded-lg hover:bg-green-600"
>
Update Message
</button>
</div>
</>
)
}
// pages/api/hello.ts (Pages Router)
import type { NextApiRequest, NextApiResponse } from 'next'
type Data = {
message: string
timestamp: string
}
export default function handler(
req: NextApiRequest,
res: NextApiResponse<Data>
) {
res.status(200).json({
message: 'Hello from Turbopack API!',
timestamp: new Date().toISOString()
})
}
// components/IconComponent.tsx
import { ReactComponent as Icon } from '../assets/icon.svg'
export default function IconComponent() {
return (
<div className="flex items-center space-x-2">
<Icon className="w-6 h-6 text-blue-500" />
<span>SVG Icon</span>
</div>
)
}
// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
'./components/**/*.{js,ts,jsx,tsx,mdx}',
'./app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {
colors: {
primary: '#3b82f6',
secondary: '#64748b',
},
},
},
plugins: [],
}
/* app/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply px-4 py-2 bg-primary text-white rounded-lg hover:bg-blue-600 transition-colors;
}
}
// components/Button.tsx
import styles from './Button.module.css'
import { ReactNode } from 'react'
interface ButtonProps {
children: ReactNode
variant?: 'primary' | 'secondary'
onClick?: () => void
}
export default function Button({
children,
variant = 'primary',
onClick
}: ButtonProps) {
return (
<button
className={`${styles.button} ${styles[variant]}`}
onClick={onClick}
>
{children}
</button>
)
}
// components/StyledButton.tsx
'use client'
import styled from 'styled-components'
const StyledButton = styled.button<{ variant: 'primary' | 'secondary' }>`
padding: 0.5rem 1rem;
border: none;
border-radius: 0.375rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
background-color: ${props =>
props.variant === 'primary' ? '#3b82f6' : '#64748b'
};
color: white;
&:hover {
background-color: ${props =>
props.variant === 'primary' ? '#2563eb' : '#475569'
};
}
`
export default function Button({
children,
variant = 'primary',
...props
}: {
children: React.ReactNode
variant?: 'primary' | 'secondary'
onClick?: () => void
}) {
return (
<StyledButton variant={variant} {...props}>
{children}
</StyledButton>
)
}
// styles/components.scss
$primary-color: #3b82f6;
$secondary-color: #64748b;
$border-radius: 0.375rem;
@mixin button-base {
padding: 0.5rem 1rem;
border: none;
border-radius: $border-radius;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.btn {
@include button-base;
&--primary {
background-color: $primary-color;
color: white;
&:hover {
background-color: darken($primary-color, 10%);
}
}
&--secondary {
background-color: $secondary-color;
color: white;
&:hover {
background-color: darken($secondary-color, 10%);
}
}
}
# .env.production
NEXT_PUBLIC_API_URL=https://api.production.com
NEXT_PUBLIC_APP_NAME=Production App
DATABASE_URL=postgresql://user:password@prod-db:5432/mydb
SECRET_KEY=production-secret-key
// components/ApiExample.tsx
'use client'
import { config } from '@/lib/config'
import { useEffect, useState } from 'react'
export default function ApiExample() {
const [data, setData] = useState(null)
useEffect(() => {
fetch(`${config.apiUrl}/hello`)
.then(res => res.json())
.then(setData)
}, [])
return (
<div className="p-4 border rounded-lg">
<h3 className="font-semibold mb-2">API Response</h3>
<p className="text-sm text-gray-600 mb-2">
API URL: {config.apiUrl}
</p>
<pre className="text-xs bg-gray-100 p-2 rounded">
{JSON.stringify(data, null, 2)}
</pre>
</div>
)
}