Next.js
Przegląd
Next.js to framework Reacta dla zastosowań produkcyjnych. Oferuje hybrydowe renderowanie statyczne i serwerowe, wsparcie dla TypeScript, inteligentne pakowanie, prefetching tras i wiele więcej, bez żadnej konfiguracji.
Pierwsze kroki
Utwórz repozytorium z szablonu
Na pulpicie przejdź do zakładki Tools & Deployment. Kliknij przycisk "New Repository", wybierz szablon Next.js z listy rozwijanej, wpisz nazwę repozytorium i subdomenę, a następnie kliknij "Create Repository".
Sklonuj repozytorium
git clone https://<git-server>/<username>/<repo-name>.git
cd <repo-name>
Zainstaluj zależności
npm install
Uruchom serwer deweloperski
npm run dev
Otwórz http://localhost:4200 w przeglądarce.
Zbuduj i wypchnij zmiany
npm run build
git add .
git commit -m "Initial setup"
git push origin main
Lokalny rozwój z Dockerem
Jeśli nie masz lokalnie zainstalowanego Node.js, możesz użyć Dockera do uruchamiania komend Next.js.
Uruchamianie komend z Dockerem
# Uruchom npm install
docker run --rm -v $(pwd):/app -w /app node:lts-alpine npm install
# Uruchom serwer deweloperski
docker run --rm -v $(pwd):/app -w /app -p 4200:4200 node:lts-alpine npm run dev
# Zbuduj wersję produkcyjną
docker run --rm -v $(pwd):/app -w /app node:lts-alpine npm run build
Struktura projektu
├── app/ # App Router (Next.js 13+)
│ ├── layout.js # Layout główny
│ ├── page.js # Strona główna
│ ├── api/ # Trasy API
│ └── [routes]/ # Trasy dynamiczne
├── public/ # Pliki statyczne
├── components/ # Komponenty React
├── styles/ # Pliki CSS
├── next.config.js # Konfiguracja Next.js
├── package.json # Zależności
└── Dockerfile # Konfiguracja Docker
Typowe zadania
Tworzenie strony
Utwórz pliki w katalogu app/:
// app/about/page.js
export default function AboutPage() {
return <h1>About Us</h1>;
}
Tworzenie trasy API
// app/api/users/route.js
export async function GET() {
return Response.json({ users: [] });
}
export async function POST(request) {
const data = await request.json();
return Response.json({ created: data });
}
Komponenty serwerowe vs klienckie
// Server Component (domyślnie) – działa na serwerze
export default async function Page() {
const data = await fetch('https://api.example.com');
return <div>{data}</div>;
}
// Client Component – dodaj dyrektywę 'use client'
'use client';
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
Przydatne komendy
npm run dev
Uruchom serwer dev z Turbopack
npm run build
Utwórz build produkcyjny
npm start
Uruchom serwer produkcyjny
npm run lint
Uruchom ESLint
Rozwiązywanie problemów
Błędy hydration mismatch
Rozwiązanie: Upewnij się, że serwer i klient renderują tę samą zawartość. Użyj 'use client' dla komponentów interaktywnych.
useState nie działa
Rozwiązanie: Dodaj 'use client' na początku pliku. Server Components nie mogą używać hooków.
Build kończy się błędem po wdrożeniu
Rozwiązanie: Najpierw uruchom npm run build lokalnie, aby sprawdzić błędy przed wypchnięciem zmian.