Module resolution
- TypeScript kursu
- Uzman
- Ders 15/35
- 4 dk
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 OKYanlış 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
// 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
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ç
{
"compilerOptions": {
"moduleResolution": "____"
}
}
{
"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 |