Sei stanco di navigare in file JavaScript infiniti da 3000 righe? La gestione del codice “spaghetti” è un problema che ogni sviluppatore affronta, ma la soluzione esiste ed è standard: i Moduli ES6 Import Export.
Fino a pochi anni fa, per dividere il codice in più file dovevamo affidarci a tag <script> multipli o librerie esterne. Oggi, grazie allo standard ECMAScript 2015 (ES6), abbiamo un sistema nativo potente ed elegante per gestire la modularità.
In questa guida definitiva su fabiogulotta.it, imparerai a padroneggiare la sintassi di import ed export per trasformare il tuo caos in un’architettura software professionale e scalabile.
Cos’è un Modulo in JavaScript?
I Moduli ES6 sono semplicemente file JavaScript che vivono nel proprio scope locale. Questo significa che variabili, funzioni e classi definite in un modulo non sono visibili all’esterno, a meno che tu non decida esplicitamente di esportarle.
Utilizzare i moduli offre tre vantaggi cruciali:
- Manutenibilità: Codice diviso in piccoli pezzi logici facili da gestire.
- Namespace Pulito: Eviti conflitti di nomi nel Global Scope (niente più variabili sovrascritte per errore!).
- Riutilizzabilità: Scrivi una funzione una volta, la importi ovunque.
Come usare Export nei Moduli ES6
Per rendere disponibile una parte del tuo codice ad altri file, devi usare la keyword export. Esistono due tipi principali di esportazione che devi conoscere.
1. Named Exports (Esportazioni Nominate)
I Named Exports sono ideali quando vuoi esportare più valori da un singolo file (come una libreria di utility). Devono essere importati con il loro nome esatto.
// file: mathUtils.js
// Esportazione inline
export const PI_GRECO = 3.14159;
export function somma(a, b) {
return a + b;
}
// Esportazione multipla alla fine
const sottrai = (a, b) => a - b;
const moltiplica = (a, b) => a * b;
export { sottrai, moltiplica };
2. Default Exports (Esportazione Predefinita)
Il Default Export è progettato per moduli che fanno “una cosa sola”, come una Classe o un Componente React. Puoi avere solo un export default per file.
// file: Utente.js
export default class Utente {
constructor(nome) {
this.nome = nome;
}
saluta() {
return `Ciao, sono ${this.nome}`;
}
}
Come usare Import nei Moduli ES6
Ora che abbiamo esportato il codice, vediamo come importarlo correttamente usando la sintassi dei Moduli ES6 Import Export.
Importare Named Exports
Usa le parentesi graffe {}. I nomi devono corrispondere esattamente a quelli esportati.
// file: main.js
import { somma, PI_GRECO } from './mathUtils.js';
console.log(somma(10, 5)); // Output: 15
Se hai un conflitto di nomi, puoi rinominare l’importazione con as:
import { somma as sommaTotale } from './mathUtils.js';
Importare Default Exports
Per i default export, non servono le graffe e puoi scegliere il nome che preferisci.
// file: app.js
import UserProfile from './Utente.js'; // Posso chiamarlo come voglio
const myUser = new UserProfile("Fabio");
Best Practices per l’Architettura Modulare
Per ottenere il massimo dai Moduli ES6 Import Export e mantenere il punteggio di qualità del tuo codice alto, segui queste regole:
1. Usa “type=module” nel Browser
Se stai usando i moduli direttamente nel browser (senza un bundler come Webpack o Vite), devi specificare l’attributo nel tuo HTML:
<script type="module" src="main.js"></script>2. Import Namespace (Importare tutto)
Se un modulo esporta molte funzioni, puoi importarle tutte insieme come un oggetto unico per mantenere il codice pulito:
import * as Matematica from './mathUtils.js';
console.log(Matematica.somma(2, 2));
3. Evita la logica nel momento dell’import
I moduli dovrebbero contenere definizioni, non esecuzioni. Evita di far eseguire codice pesante semplicemente importando un file.
Conclusione
Padroneggiare i Moduli ES6 Import Export è il primo passo per diventare un Senior Developer. Ti permette di strutturare le tue applicazioni come i professionisti, rendendo il debugging un gioco da ragazzi.
Vuoi approfondire altri concetti moderni? Leggi la nostra guida su scope javascript e la gerarchia delle variabili o scopri come gestire gli errori con Best Practices: Async Await e Try Catch
Per i dettagli tecnici più approfonditi, ti consiglio di consultare la documentazione ufficiale su MDN Web Docs.





