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; }
CommonJSESM
Söz dizimirequire / module.exportsimport / export
YüklemeSenkron, çalışma zamanındaAsenkron, önce statik analiz
Dinamik yüklemerequire(degisken) her yerdeawait import(degisken)
Top-level awaitYokVar
__dirname, __filenameVarYok, import.meta.dirname (Node 20.11+) veya import.meta.url
Tree shakingZorKolay (statik yapı)
Dışa aktarılan değerKopya (o anki değer)Canlı bağlantı (live binding)

Node.js bir dosyanın hangisi olduğuna nasıl karar verir?

  • .mjs her zaman ESM, .cjs her zaman CommonJS.
  • .js uzantısı için en yakın package.json içindeki "type" alanına bakılır: "module" ise ESM, yoksa veya "commonjs" ise CommonJS.

Birlikte kullanım

  • ESM içinden CommonJS modülü import edilebilir.
  • CommonJS içinden ESM için await import() kullanılır; yeni Node sürümleri (22+) senkron ESM'i require() 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.

  1. cluster modülü ile worker_threads arasındaki fark nedir? Hangisini ne zaman kullanırsınız?ZorNode.jsBackend
  2. Node.js event loop'u nasıl çalışır? libuv'nin rolü ve event loop aşamaları nelerdir?ZorNode.jsBackend
  3. Node.js'te asenkron kodda hata yönetimi nasıl yapılır? unhandledRejection nedir?OrtaNode.jsBackend
  4. Node.js'te stream nedir? Türleri nelerdir ve backpressure ne demektir?OrtaNode.jsBackend
  5. process.nextTick, Promise.then, setImmediate ve setTimeout(fn, 0) hangi sırayla çalışır?OrtaNode.jsBackend
  6. Express.js'te middleware nedir ve nasıl çalışır?KolayNode.jsBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle