create-next-app și structura proiectului

Subiect din roadmap-ul Next.js · parte din „Introducere în Next.js”

create-next-app este instrumentul oficial și standardul industriei pentru inițializarea rapidă a aplicațiilor Next.js. În practică, acest CLI configurează automat build-ul, gestionează modulele și impune o structură de fișiere optimizată, eliminând necesitatea configurării manuale a Webpack sau Babel. Folosirea lui corectă îți economisește ore de setup și asigură că proiectul tău respectă cele mai bune practici de la prima linie de cod, facilitând scalarea și colaborarea în echipă.

Concepte cheie

  • CLI Oficial: create-next-app este modulul npm/yarn/pnpm recomandat de echipa Vercel pentru a genera scheletul aplicației cu configurația implicită optimă.
  • App Router vs Pages Router: Versiunile recente folosesc implicit app/ (bazat pe React Server Components), dar poți alege pages/ pentru compatibilitate legacy sau preferințe personale.
  • Structura app/: Directorul principal care conține layout-uri, pagini și componente, mapând direct la rutele URL-ului aplicației tale.
  • File-based Routing: Fiecare fișier page.tsx sau layout.tsx din directorul app devine automat o rută accesibilă prin URL, fără configurare manuală.
  • Configurare next.config.js: Fișierul central unde definim variabile de mediu, optimizări imaginilor, rewrites și alte setări specifice Next.js.
  • Hot Module Replacement (HMR): Mecanismul care actualizează componentele în browser instantaneu după salvare, fără a reîncărca întreaga pagină.
  • TypeScript Implicit: Proiectele noi sunt configurate implicit cu TypeScript, oferind siguranță tipurilor și o experiență de dezvoltare superioară.

Exemplu practic

Să presupunem că vrei să creezi o aplicație simplă de blog. Deschide terminalul și rulează:

npx create-next-app@latest my-blog --typescript --tailwind --eslint

Acest comanda va crea folderul my-blog, va instala dependențele necesare și va configura Tailwind CSS și ESLint. După intrarea în folder (cd my-blog) și pornirea serverului de dezvoltare (npm run dev), vei vedea structura app/. Dacă creezi un fișier app/blog/page.tsx, vei accesa automat ruta http://localhost:3000/blog. Aceasta demonstrează puterea routing-ului bazat pe fișiere: nu ai nevoie de fișiere de configurare separate pentru rute.

Greșeli frecvente

  1. Ignorarea avertismentelor ESLint: Avertismentele indică adesea probleme de performanță sau erori potențiale; ignorarea lor duce la cod fragil.
  2. Amestecarea Server și Client Components: Definirea componentelor care modifică DOM-ul (hooks precum useState) ca Server Components fără "use client" va cauza erori de compilare.
  3. Configurarea manuală excesivă: Modificarea fișierelor de build generate automat poate strica actualizările viitoare ale Next.js; folosește next.config.js pentru personalizări.
  4. Utilizarea getStaticProps în App Router: Această metodă aparține vechiului Pages Router; în app/, datele se preiau direct în componente asincrone.

Întrebări de interviu

Întrebare: Care este diferența dintre create-next-app și un boilerplate personalizat? Răspuns: create-next-app este menținut de echipa oficială Next.js, garantând compatibilitatea cu noile versiuni și integrarea cu Vercel, spre deosebire de boilerplate-urile comunitare care pot deveni rapide.

Întrebare: De ce este importantă structura app/ în Noile Aplicații Next.js? Răspuns: Structura app/ permite utilizarea React Server Components, îmbunătățește performanța prin încărcare progresivă și simplifică gestionarea layout-urilor și a stării aplicației.

Întrebare: Cum gestionezi variabilele de mediu în proiectele create cu create-next-app? Răspuns: Prin fișiere .env.local (pentru dezvoltare) sau .env.production (pentru producție), care sunt încărcate automat de Next.js și accesibile prin process.env.NUME_VARIABILA.

Exercițiu

Creează o aplicație Next.js cu TypeScript și Tailwind CSS folosind create-next-app. Adaugă o pagină nouă la ruta /about care afișează numele tău și o scurtă descriere. Verifică dacă navigarea către această rută funcționează corect fără reîncărcarea paginii. Timp estimat: 30-45 minute.

Resurse gratuite

Alte subiecte din „Introducere în Next.js”