Tsconfig'te "hedef" ve "modül" kavramlarını anlama


83

Aşağıda tsconfig.jsonhedef es5ve modülü belirlediğim dosyam vares6

{
   "compilerOptions": {
   "target": "es5",    
   "module": "es6"
   }

}

Sorum şu ki, modüller [içe aktarma / dışa aktarma] es6'nın parçası ve es5 DEĞİL, kopyalanan javascript kodunda içe / dışa aktarma ifadeleri olmamalı. Ancak oluşturulan javascript kodu, hedef es5 olmasına rağmen içe / dışa aktarma ifadelerine sahip, bu nasıl mümkün olabilir?


Yanıtlar:


61

Modül sistemi, dil uygulamasından bağımsızdır. ES6 (ES2015) modülleri, import/export sözdizimini ve bunu yorumlamak modül yükleyiciye bağlıdır.

Burada ES2015 modül sistemini kullanmayı belirlediniz, böylece ES6 modülü sözdizimini etkinleştirir.

JavaScript'in kendisi ES5'i hedefleyebilir ve yalnızca ES5 özelliklerini kullanabilir, ancak bu kodla ES2015 modül sözdizimi ile çalışan bir modül yükleyici kullanmak teorik olarak mümkündür. Mümkün olmasına rağmen, mutlaka yapmak isteyeceğiniz bir şey değildir. ES5 JavaScript ile CommonJS veya AMD modüllerini kullanmak daha yaygındır.

Görünüşe göre bu kombinasyona TypeScript 2.0'dan önce bile izin verilmiyordu. TypeScript 2.0 sürüm notlarında şöyle diyor:

"Önceden geçersiz bayrak kombinasyonu olarak işaretlenmiş olan target: es5 ve 'module: es6' artık destekleniyor. Bu, toplama gibi ES2015 tabanlı ağaç sallayıcıların kullanılmasını kolaylaştırmalıdır."


4
Bu bayraklardan herhangi biri, derlenen kodun hangi dilde ve modül sisteminde çıktı olduğunu tanımlıyor mu, yoksa bu bayraklar yalnızca giriş kaynağının nasıl ayrıştırılması gerektiğini belirlemek için mi?
Tom

1
"Modül sistemi dil uygulamasından bağımsızdır" - Bunun neden böyle olduğunu biliyor musunuz? Bunun için herhangi bir belge var mı?
KaushikTD

18

Önceki yanıtı tamamlamak için, 2020'de modül çözünürlüğünü ve derleme çıktısını tanımlayan 4 TS yapılandırma seçeneği vardır:

  • module.
  • target.
  • lib.
  • moduleResolution.

İlk üçü çıktınızı etkilerken, ikincisi derleyicinin modüllerinizi çözümlemek ve paketlemek için arama şeklini etkiler.

İşte bu seçenekler hakkında harika ve kısa bir makale: Typescript karmaşası: tsconfig.json modülü, moduleResolution, target & lib açıkladı | Tom Medema tarafından | Orta .

Ek olarak, modül çözünürlüğü hakkında bir doküman: TypeScript: El Kitabı - Modül Çözünürlüğü .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.