CommonJS ile ES Modules (ESM) arasındaki fark nedir?
Cevap
Node.js iki modül sistemini destekler.
// CommonJS
const fs = require("fs");
module.exports = { topla };
// ES Modules
import fs from "node:fs";
export function topla(a, b) { return a + b; }| CommonJS | ESM | |
|---|---|---|
| Söz dizimi | require / module.exports | import / export |
| Yükleme | Senkron, çalışma zamanında | Asenkron, önce statik analiz |
| Dinamik yükleme | require(degisken) her yerde | await import(degisken) |
| Top-level await | Yok | Var |
__dirname, __filename | Var | Yok, import.meta.dirname (Node 20.11+) veya import.meta.url |
| Tree shaking | Zor | Kolay (statik yapı) |
| Dışa aktarılan değer | Kopya (o anki değer) | Canlı bağlantı (live binding) |
Node.js bir dosyanın hangisi olduğuna nasıl karar verir?
.mjsher zaman ESM,.cjsher zaman CommonJS..jsuzantısı için en yakınpackage.jsoniçindeki"type"alanına bakılır:"module"ise ESM, yoksa veya"commonjs"ise CommonJS.
Birlikte kullanım
- ESM içinden CommonJS modülü
importedilebilir. - CommonJS içinden ESM için
await import()kullanılır; yeni Node sürümleri (22+) senkron ESM'irequire()ile yüklemeyi de destekler. - ESM'de göreli importlarda dosya uzantısı zorunludur:
import { x } from "./util.js".
Yeni projelerde standart olan ESM tercih edilir; CommonJS eski paketler ve mevcut kod tabanlarında hâlâ yaygındır.
İlgili Node.js soruları
- cluster modülü ile worker_threads arasındaki fark nedir? Hangisini ne zaman kullanırsınız?
- Node.js event loop'u nasıl çalışır? libuv'nin rolü ve event loop aşamaları nelerdir?
- Node.js'te asenkron kodda hata yönetimi nasıl yapılır? unhandledRejection nedir?
- Node.js'te stream nedir? Türleri nelerdir ve backpressure ne demektir?
- process.nextTick, Promise.then, setImmediate ve setTimeout(fn, 0) hangi sırayla çalışır?
- Express.js'te middleware nedir ve nasıl çalışır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.