CodeBlanks Logo Icon CodeBlanks

Module resolution

moduleResolution seçeneklerini öğrenirsin.

moduleResolution nedir?

moduleResolution, bir import deyiminin hedef dosyayı nasıl bulacağını belirler. Yaygın değerler: node (klasik Node çözümleme), node16/nodenext (Node 16+ kuralları) ve bundler (Vite, webpack gibi paketleyiciler).

{
  "compilerOptions": {
    "moduleResolution": "bundler"
  }
}

bundler, uzantısız import'lara izin verir; node16 ise tam uzantı ister.

node vs node16 vs bundler

node, klasik CommonJS çözümlemesidir ve uzantısız import'lara izin verir. node16/nodenext, ESM kurallarını uygular ve .js uzantısı zorunludur. bundler ise paketleyici davranışını taklit eder; module seçeneğinden bağımsız çalışır.

// node16: import "./foo.js"  // uzantı şart
// bundler: import "./foo"    // uzantısız OK

Yanlış seçim, çalışma zamanında modül bulunamadı hatasına yol açabilir.

Uygulama Modül yolunu çöz

Bir resolveModule fonksiyonu yaz: specifier ve strategy alsın. bundler için uzantısız, node16 için .js uzantılı, node için klasik çözümleme dizesi döndürsün. resolveModule("./foo", "bundler") çağrısının sonucunu yazdır.

Başlangıç kodu

index.ts
// resolveModule: çözümleme stratejisine göre yol döndürür
// birinci strateji için uzantısız
// ikinci strateji için .js uzantılı
// node için klasik
// "./foo" ve "bundler" için sonucu yazdır

Örnek çözüm

index.ts
type Resolution = "node" | "node16" | "bundler";

function resolveModule(specifier: string, strategy: Resolution): string {
  if (strategy === "bundler") {
    return specifier + " (no extension required)";
  }
  if (strategy === "node16") {
    return specifier + ".js (full path required)";
  }
  return specifier + " (node classic)";
}

console.log(resolveModule("./foo", "bundler"));

Beklenen çıktı

./foo (no extension required)

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Vite veya webpack kullanan bir proje için hangi moduleResolution uygundur?

  • node16
  • classic
  • bundler Doğru cevap
  • amd

Açıklama: bundler, paketleyici tabanlı projeler için tasarlanmıştır ve uzantısız import'lara izin verir; node16 tam uzantı ister, classic ve amd ise modern paketleyiciler için uygun değildir.

2 Bundler çözümlemesi seç

Soru
{
  "compilerOptions": {
    "moduleResolution": "____"
  }
}
Cevap
{
  "compilerOptions": {
    "moduleResolution": "bundler"
  }
}

Açıklama: bundler, paketleyici tabanlı projeler için doğru değerdir; node klasik CommonJS, classic eski, amd modül yükleyici odaklıdır.

3 Çözümleme stratejileri

Kavram Anlamı
node klasik CommonJS çözümleme
node16 ESM kuralları, uzantı şart
bundler paketleyici davranışı
nodenext node16 ile eşdeğer

Uzman bölümündeki tüm dersler