- Konu sahibi
- #1
TypeScript’te “Cannot find module” hatasını çözmek için önce hata mesajındaki modül adının bir dosya yolu mu, yoksa paket adı mı olduğunu belirleyin. Dosya yolunu ve harflerin büyüklüğünü doğrulayın; paket kullanıyorsanız doğru projede kurulu olduğunu ve tür bildirimlerinin erişilebilirliğini kontrol edin. Ardından projenin modül çözümleme ayarını çalıştırma ortamıyla eşleştirip derlemeyi yeniden çalıştırın.
Hata mesajındaki modül adını ve
Örneğin
Dosyanın gerçekten belirtilen yerde olduğunu ve
Paket adını hatadaki yazımıyla projenin
Paket eksikse ve gerçekten o projede kullanılacaksa, npm kullanan bir projede şu komutla ekleyebilirsiniz:
Bu komut yalnız örnekteki
Tür paketi, asıl çalışma zamanı paketinin yerine geçmez. Her paket için ayrıca
Modül çözümleme, TypeScript’in bir içe aktarmanın hangi dosya veya pakete karşılık geldiğini bulma işlemidir. Projenin kullandığı
Örneğin bundler kullanan bir uygulamada
Node.js’in ES modülü olarak çalıştırdığı kodda göreli içe aktarmalar genellikle çıktı dosyasının uzantısını belirtmelidir. Örneğin TypeScript kaynağı
Sorun sürüyorsa doğru proje dizininde aşağıdaki komutu çalıştırın; gerekirse
Çıktıda hata veren modül adını arayın. Denenen yollar yanlış dizini gösteriyorsa içe aktarmayı veya takma ad eşlemesini düzeltin; paket bulunamıyorsa kurulumun ve kullanılan proje dizininin doğru olduğuna bakın. Paket bulunup bir alt yol çözümlenemiyorsa dışa aktarılan yolları ve çözümleme ayarını inceleyin.
Komut satırında hata yok ama editörde devam ediyorsa doğru proje klasörünün açık olduğunu ve editörün aynı TypeScript sürümünü kullandığını kontrol edin; ardından editörün TypeScript hizmetini veya editörü yeniden başlatın. Yardım isterken hata metnini, ilgili
Önce hatalı içe aktarmayı bulun
Hata mesajındaki modül adını ve
import satırını not edin. ./ veya ../ ile başlayan adlar içe aktaran dosyaya göre hesaplanan yerel yollardır; lodash gibi adlar ise genellikle paketleri gösterir. @/ gibi özel bir önek kullanılıyorsa yol takma adını da kontrol etmek gerekir.Örneğin
src/app.ts içinden src/utils/math.ts dosyası kullanılıyorsa, aşağıdaki içe aktarma paket değil, yerel dosya arar:
Kod:
import { add } from "./utils/math";
Dosyanın gerçekten belirtilen yerde olduğunu ve
utils, math gibi adların büyük/küçük harflerinin birebir eşleştiğini doğrulayın. Dosya başka bir dizindeyse yolu, app.ts dosyasının bulunduğu dizini başlangıç alarak düzeltin. Bu örnekte dosyanın ayrıca add adında bir dışa aktarımı olmalıdır; dosya bulunsa bile dışa aktarım yanlışsa farklı bir hata alırsınız.Paket ve tür bildirimlerini kontrol edin
Paket adını hatadaki yazımıyla projenin
package.json dosyasında arayın. Bağımlılık dosyada varsa önce projenin kullandığı paket yöneticisiyle bağımlılıkları kurun. Örneğin npm kullanan bir projede, terminali ilgili projenin dizininde açıp npm install çalıştırın. Bir çalışma alanında hangi paketin bağımlılığa ihtiyacı olduğunu da kontrol edin.Paket eksikse ve gerçekten o projede kullanılacaksa, npm kullanan bir projede şu komutla ekleyebilirsiniz:
Kod:
npm install lodash
Bu komut yalnız örnekteki
lodash paketini kurar; kendi hatanızdaki paket adını ve projenizin paket yöneticisini kullanın. Kurulumdan sonra aynı derleme komutunu yeniden çalıştırın. Paket bulunmasına rağmen tür bildirimi hatası sürüyorsa paketin kendi TypeScript bildirimlerini içerip içermediğini inceleyin. Gerekliyse ve pakete uygun ayrı bir bildirim paketi varsa onu da kurun; örneğin:
Kod:
npm install -D @types/lodash
Tür paketi, asıl çalışma zamanı paketinin yerine geçmez. Her paket için ayrıca
@types kurulması gerekmez; bazı paketler türlerini kendileri sağlar. Paket kurulu olduğu hâlde yalnız belirli bir alt yol bulunamıyorsa paketin belgelerinde ve package.json içindeki exports alanında o yolun dışa açılıp açılmadığını kontrol edin.Çözümleme ayarını çalışma ortamıyla eşleştirin
Modül çözümleme, TypeScript’in bir içe aktarmanın hangi dosya veya pakete karşılık geldiğini bulma işlemidir. Projenin kullandığı
tsconfig.json dosyasında mevcut compilerOptions ayarlarını, kodun gerçekte nasıl çalıştırıldığına göre değerlendirin:| Ortam | Kontrol edilecek ayar |
|---|---|
| Doğrudan modern Node.js | Uyumlu Node.js modül ayarları; örneğin module ve moduleResolution için nodenext |
| Bundler ile derlenen uygulama | Bundler yapılandırmasıyla uyumlu module ve moduleResolution: bundler |
module: "esnext" ve moduleResolution: "bundler" birlikte kullanılabilir. Doğrudan Node.js’te çalışan bir projede ise sırf hatayı susturmak için bundler çözümlemesine geçmeyin: TypeScript’in kabul ettiği bir yol, Node.js çalışırken bulunamayabilir. Mevcut yapılandırmayı değiştirmeden önce projenin derleme aracının gereksinimlerini kontrol edin ve değişiklikleri kaydedin.Node.js’in ES modülü olarak çalıştırdığı kodda göreli içe aktarmalar genellikle çıktı dosyasının uzantısını belirtmelidir. Örneğin TypeScript kaynağı
utils/math.ts, normal derlemede utils/math.js üretiyorsa ilgili içe aktarma "./utils/math.js" olabilir. Bu durum her proje için geçerli değildir; dosyanın modül biçimi ve gerçek çıktı yapısı belirleyicidir.Takma adları ve çözümleme izini inceleyin
@/utils/math gibi bir takma ad kullanıyorsanız tsconfig.json içindeki paths eşlemesinin doğru dizini gösterdiğini kontrol edin. Ancak paths, üretilen JavaScript’teki içe aktarma yolunu değiştirmez. Dolayısıyla aynı takma adın bundler veya çalıştırma ortamı tarafından da çözümlenmesi gerekir. TypeScript hatasının kaybolması, uygulamanın çalışma sırasında modülü bulacağını tek başına kanıtlamaz.Sorun sürüyorsa doğru proje dizininde aşağıdaki komutu çalıştırın; gerekirse
tsconfig.json yerine ilgili yapılandırmanın yolunu verin:
Kod:
npx tsc --project tsconfig.json --noEmit --traceResolution
Çıktıda hata veren modül adını arayın. Denenen yollar yanlış dizini gösteriyorsa içe aktarmayı veya takma ad eşlemesini düzeltin; paket bulunamıyorsa kurulumun ve kullanılan proje dizininin doğru olduğuna bakın. Paket bulunup bir alt yol çözümlenemiyorsa dışa aktarılan yolları ve çözümleme ayarını inceleyin.
--noEmit dosya üretmeden kontrol yapar; başarılı kontrolün ardından uygulamayı kendi normal derleme ve çalıştırma komutlarıyla da deneyin.Komut satırında hata yok ama editörde devam ediyorsa doğru proje klasörünün açık olduğunu ve editörün aynı TypeScript sürümünü kullandığını kontrol edin; ardından editörün TypeScript hizmetini veya editörü yeniden başlatın. Yardım isterken hata metnini, ilgili
import satırını, dosya ağacının gerekli kısmını, TypeScript sürümünü ve ilgili yapılandırma ayarlarını paylaşın. Çözümleme izindeki kullanıcı adları, özel yollar ve diğer hassas bilgileri paylaşmadan önce ayıklayın.