DanLevy.net

Esportazioni ESM: nominate o predefinite?

Denominare o no?

Hero image for Esportazioni ESM: nominate o predefinite?

Dovresti usare le esportazioni named o default in JavaScript?

Non mancano gli articoli dal tono deciso su questo argomento.

La maggior parte giudica il default export come “terribile”. Altri sostengono che il default debba prevalere (ad es. la guida di stile di AirBnb).

Spesso incolpano cose interamente temporanee: bug di auto‑import degli IDE, le capacità di tree‑shaking di un bundler specifico, o la semplice possibilità di errori di battitura quando si nomina un import.

Abbiamo perso di vista lo scopo dell’export fin dall’inizio?

Il codice è comunicazione. ✨

Stiamo inviando un segnale agli importer su come usare una cosa.

Quindi, cosa stiamo dicendo?

In linea di massima, ci sono 2 modalità per esportare elementi in JavaScript moderno:

Ovviamente puoi combinare entrambi, o adottare approcci diversi per parti differenti del tuo codice. Vedi più esempi alla fine dell’articolo.

Argomenti deboli, amico

Affrontiamo alcune delle “questioni temporanee” più comuni che gli sviluppatori incontrano.

// Puoi aliasare usando entrambi!
import { Knife as Handle } from "./knife.js"; // 🔪
import { default as Handle } from "./knife.js"; // 🔪
import Handle from "./knife.js"; // 🔪

In realtà esistono molte combinazioni di modalità di esportazione, ognuna racconta una storia diversa:

Default (Exports)Named (Exports)Private FnsPatternMeaning
Una esportazione default.“Presentiamo UNA funzione con scopo unico!”
Una esportazione nominata.“Per favore, non rinominarmi.”
Export default + più funzioni ‘private’ non esportate“Ecco della logica correlata. Inoltre, ci si può aspettare un comportamento simile a una classe.”
Molte esportazioni nominate, nome file generico.“Un miscuglio di cose vagamente correlate, senza gerarchia implicita.”
Esportazione nominata singola ANCHE esportata come default“Non puoi sbagliare nell’importarmi.”

Qualcosa su cui riflettere: Cosa stiamo dicendo quando il nome del file corrisponde o meno a una delle sue esportazioni? (Ad esempio, un utils.js con molte funzioni.)

Conclusione

Se il codice è comunicazione, per favore export come cazzo intendi. 💞