Αυτά είναι τα δύο συστήματα ενοτήτων του JavaScript για διαίρεση κώδικα σε αρχεία.
ES Modules (ESM) — το σύγχρονο πρότυπο
// import / export, used in browsers and modern Node
import { sum } ;
defaultThing ;
x = ;
() {};
Αυτά είναι τα δύο συστήματα ενοτήτων του JavaScript για διαίρεση κώδικα σε αρχεία.
// import / export, used in browsers and modern Node
import { sum } ;
defaultThing ;
x = ;
() {};
const { sum } = require("./math");
module.exports = { x: 1 };
| ES Modules | CommonJS | |
|---|---|---|
| Σύνταξη | import/export | require/module.exports |
| Φόρτωση | στατικό, ασύγχρονο | δυναμικό, σύγχρονο |
| Αναλύσιμο | ✅ → tree-shaking | ❌ δυσκολότερο |
| Δεσμεύσεις | ζωντανές (μόνο ανάγνωση) | αντιγραμμένη τιμή |
this στην κορυφή | undefined | module.exports |
Στατικό σημαίνει ότι οι εισαγωγές ESM είναι γνωστές κατά την ώρα ανάλυσης, που επιτρέπει στους bundler να κάνουν tree-shaking (διαγραφή αχρησίμοτων εξαγωγών). Το CommonJS require είναι δυναμικό (μπορείτε να κάνετε υπό όρους require), οπότε δεν μπορεί να αναλυθεί τόσο εύκολα.
{ "type": "module" } // in package.json, or use the .mjs extension
Δεν μπορείτε να require() ένα πακέτο ESM-only από το CommonJS· η ανάμιξη των δύο έχει δύσκολες άκρες. Οι εισαγωγές ESM είναι επίσης ζωντανές δεσμεύσεις — εάν ο εξαγωγέας αλλάξει την τιμή, οι εισαγωγείς βλέπουν την νέα τιμή (το CJS σας δίνει ένα αντίγραφο στιγμιότυπο).
Το ESM είναι το μέλλον (ενσωματωμένο στον περιηγητή, tree-shakeable, await ανατ επιπέδου).
Προτιμήστε το για νέο κώδικα· κατανοήστε το CJS γιατί μεγάλο μέρος του οικοσυστήματος Node το χρησιμοποιεί ακόμη.