NPM, Vite e struttura progetto

Tutti i tutorial

Guida pratica per capire come vive un progetto moderno

Nota iniziale

Quando un progetto front-end cresce oltre pochi file HTML, CSS e JavaScript, iniziano a comparire strumenti come NPM, Vite, dipendenze, script e cartelle di build.

All'inizio possono sembrare pezzi separati. In realtà servono a rendere il progetto più ripetibile: installi le dipendenze, avvii un server locale, lavori sui sorgenti e generi una versione finale pronta da pubblicare.

Questa guida resta volutamente pratica: non prova a spiegare tutto l'ecosistema JavaScript, ma ti dà il modello mentale minimo per non perderti davanti a working tree, package.json, node_modules, src e dist.

Illustrazione di apertura della guida NPM, Vite e struttura progetto

1. Perché esistono NPM e Vite

Panoramica di NPM Vite script dipendenze e build di progetto
NPM gestisce pacchetti e comandi, Vite gestisce sviluppo locale e build finale.

NPM è un package manager: ti aiuta a installare, aggiornare e registrare le librerie usate dal progetto.

Vite invece è un build tool e dev server: durante lo sviluppo serve i file in locale, aggiorna velocemente la pagina e, quando serve, genera la cartella finale per la pubblicazione.

In pratica lavorano insieme:

  • NPM legge package.json e installa quello che serve;
  • gli script NPM ti danno comandi brevi e condivisi;
  • Vite avvia il server locale o crea la build finale;
  • la cartella di output, spesso dist, è quella che poi finisce online.

Il vantaggio non è avere più strumenti per complicarsi la vita. È avere un modo prevedibile per far girare lo stesso progetto su più computer e in deploy.

2. Package manager e package.json

Il file package.json è una specie di carta d'identità tecnica del progetto.

Dentro trovi informazioni come nome, versione, script e dipendenze. Non devi ricordare tutto a memoria, ma devi sapere dove guardare quando vuoi capire come si avvia o si costruisce il progetto.

{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {},
  "devDependencies": {
    "vite": "^8.0.7"
  }
}

La parte più utile all'inizio è scripts: contiene i comandi ufficiali del progetto. Se lavori in team o riprendi un progetto dopo mesi, è il primo posto da controllare.

3. Script: comandi del progetto

Gli script sono scorciatoie condivise. Invece di ricordare ogni comando interno, usi comandi stabili come questi:

npm install
npm run dev
npm run build
npm run preview
  • npm install installa le dipendenze dichiarate nel progetto;
  • npm run dev avvia il server locale di sviluppo;
  • npm run build genera la versione finale;
  • npm run preview prova localmente la build prodotta.

Questa distinzione è importante: dev serve mentre lavori, build serve per preparare l'output, preview serve per controllare l'output finale prima del deploy.

4. Dipendenze, node_modules e lockfile

Una dipendenza è un pacchetto esterno usato dal progetto: una libreria, un tool, un plugin o un framework.

Quando esegui npm install, NPM scarica i pacchetti dentro node_modules. Quella cartella può diventare enorme e normalmente non va committata su Git.

I file importanti da tenere nel repository sono invece:

  • package.json, perché dichiara cosa serve al progetto;
  • package-lock.json, perché blocca versioni precise e rende le installazioni più ripetibili;
  • .gitignore, perché evita di tracciare cartelle generate come node_modules e dist.

Se cloni un progetto da zero, non copi node_modules: installi di nuovo le dipendenze con npm install.

5. Working tree e struttura progetto

Esempio visuale di working tree con file sorgente file tracciati cartelle ignorate e output generato
Il working tree è la cartella reale del progetto: qui lavori, installi dipendenze e generi output.

Il working tree è la cartella di lavoro del progetto sul tuo computer. È il posto concreto in cui vedi file, cartelle, modifiche locali, dipendenze installate e output generati.

Quando apri un progetto in VSCode, quello che stai guardando è il working tree. Quando Git ti dice che hai file modificati, non tracciati o puliti, sta leggendo lo stato di questa cartella rispetto all'ultimo commit.

Dentro al working tree convivono cose diverse:

  • file tracciati da Git, come package.json, src, pages e configurazioni;
  • file modificati ma non ancora committati;
  • file non tracciati, appena creati e non ancora aggiunti a Git;
  • cartelle ignorate, come node_modules, che servono localmente ma non vanno nel repository;
  • output generati, come dist, che arrivano dalla build e non dovrebbero essere modificati a mano.

Capire questa distinzione evita molta confusione: non tutto quello che vedi nella cartella ha lo stesso ruolo, e non tutto deve essere committato.

Ogni progetto può organizzarsi in modo diverso, ma alcune cartelle ricorrono spesso.

src
contiene sorgenti: CSS, JS, componenti, immagini importate dal codice e logica dell'app.
public
contiene file serviti così come sono: favicon, manifest, immagini statiche o asset che non passano dal bundler.
pages
in questo progetto raccoglie le pagine HTML sorgente usate da Vite come entry.
dist
è l'output generato dalla build. Si controlla, ma normalmente non si modifica a mano.

La regola mentale è semplice: lavori sui sorgenti, lasci che gli strumenti generino l'output e pubblichi ciò che la build produce.

6. Build locale con Vite

Workflow locale con NPM Vite build dist e preview
Il ciclo base: installi, sviluppi, costruisci, controlli la build e poi pubblichi.

Durante lo sviluppo usi il server locale. È veloce, comodo e pensato per lavorare.

La build invece è un passaggio diverso: Vite prende i sorgenti, risolve import, ottimizza asset e genera file finali. In molti progetti questi file finiscono in dist.

Per questo è utile fare almeno una build locale prima di pubblicare:

npm run build
npm run preview

Se la build fallisce in locale, fallirà molto probabilmente anche sul servizio di hosting. Meglio scoprirlo prima, quando puoi leggere l'errore con calma e sistemarlo.

7. Routine minima di lavoro

Quando apri o riprendi un progetto NPM/Vite, puoi seguire questa routine:

  1. controlla package.json per capire gli script disponibili;
  2. esegui npm install se le dipendenze non sono installate;
  3. avvia npm run dev per lavorare in locale;
  4. modifica i sorgenti, non l'output generato;
  5. prima del deploy esegui npm run build;
  6. se disponibile, usa npm run preview per controllare la build finale.

Questa routine ti evita molti falsi problemi: dipendenze mancanti, script sbagliato, output vecchio o cartelle generate modificate a mano.

8. Errori comuni

Quando qualcosa si rompe, spesso il problema rientra in pochi casi ricorrenti.

  • npm install non è stato eseguito dopo clone, pull o cambio branch.
  • Stai usando uno script che non esiste in package.json.
  • Una dipendenza è in devDependencies ma viene usata come se fosse runtime.
  • Hai modificato dist invece dei file sorgente.
  • La build funziona in dev ma fallisce perché c'è un path, import o asset non corretto.
  • Il provider di deploy usa una versione Node diversa da quella locale.

Il primo passo non è cambiare tutto. Leggi il messaggio di errore, guarda quale comando stava girando e torna al file che definisce quel comando.

9. Da qui in poi

Quando capisci NPM, Vite e struttura progetto, molte parti del workflow diventano meno misteriose: perché esistono le dipendenze, cosa fa una build, cosa va online e cosa resta solo in sviluppo.

Da qui puoi collegare meglio le altre guide:

10. Sintassi rapida (Cheat Sheet)

Ecco la tabella di riferimento rapido per la gestione dei pacchetti NPM e comandi Vite:

ComandoTipo dipendenzaScopo principale
npm init -yGenericoInizializza un nuovo file package.json vuoto impostando le opzioni di default.
npm install <pkg>dependenciesInstalla un pacchetto logico necessario a runtime nel sito (es. lodash).
npm install -D <pkg>devDependenciesInstalla pacchetti necessari solo in fase di sviluppo/build (es. Vite, Prettier).
npm run devScriptAvvia il server di sviluppo locale ad altissima velocità di rendering.
npm run buildScriptCompila ed ottimizza gli asset creando la cartella di produzione 'dist/'.

11. Sfida pratica: Mettiti alla prova

Crea il tuo primo progetto guidato da terminale usando NPM:

Obiettivo della sfida:

Crea un package.json, installa un pacchetto di formattazione codice come devDependency e scrivi uno script custom per eseguirlo dal terminale.

Istruzioni passo-passo:
  1. Apri il terminale in una cartella vuota e lancia il comando npm init -y per creare il package.json di default.
  2. Installa la libreria *Prettier* come dipendenza di sviluppo scrivendo nel terminale: npm install -D prettier.
  3. Apri il file package.json con VS Code ed aggiungi lo script custom "format": "prettier --write ." all'interno del blocco "scripts".
  4. Crea un file di prova disordinato ed esegui la formattazione automatica dal tuo terminale lanciando il comando npm run format.

12. Verifica la tua preparazione (Quiz)

Metti alla prova quello che hai imparato in questa guida con questo rapido test di 10 domande a scelta multipla.