javascript - compilerOptions içinde birden fazla hedefe sahip olmak mümkün mü?
Üzgünüm, eğer bu acemi bir soruysa, ama bir Angular uygulaması yapıyorum ve mevcut tsconfig.json dosyamın 'compilerOptions' içinde 'target' olarak 'es6' var:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"types" : []
},
"exclude": [
"node_modules"
]
}
Birden fazla hedefe sahip olmak mümkün mü? Örneğin, es5 ekleyebilir miyim? Sadece soruyorum çünkü es5 için yazılmış öğreticiler üzerinden geçiyorum, ancak projemin mevcut durumu nedeniyle es6 kullanmam gerekiyor - yani geriye dönük uyum sağlayamam. Tüm kodum es6'ya uygun olmalı - her ikisi de dahil edilirse, kodumun hem es5 hem de es6'ya uyum sağlayabileceğini düşünürdüm.
Cevap #1
Aklınızda bulundurun, birden fazla tsconfig dosyası oluşturabilir ve çoğu öğeyi kapsayan bir temel tsconfig oluşturmak için extends özelliğini kullanabilir, ardından hedefleri kapsayan iki hedef tsconfig oluşturabilirsiniz.
Temel tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"types" : []
},
"exclude": [
"node_modules"
]
}
ES5 tsconfig:
{
"extends": "./base.json"
"compilerOptions": {
"target": "es5"
}
}
ES6 tsconfig:
{
"extends": "./base.json"
"compilerOptions": {
"target": "es6"
}
}
O zaman sadece ihtiyacınız olan hedefi çalıştırmanız gerekecek: tsc -p ./es6.json
Bu, kodunuzun her iki kurala aynı anda uyacağı anlamına gelmez; ancak, isteğe bağlı olarak, temel yapılandırmayı genişleten her tsconfig'e bir outDir özelliği ekleyebilir ve çıktıyı ayrı dizinlere derleyebilirsiniz.
Cevap #2
Yapılandırma için yalnızca bir hedef belirtebilirsiniz. compilerOptions'un target özelliği tek bir string değeri kabul eder.
ES5'i hedef olarak belirtmek, kaynak kodunuzu ES6 veya daha yüksek bir sürümde yazmanızı engellemez, sadece derlenmiş kodun yalnızca ES5 veya daha düşük sürümleri anlayan istemcilerle uyumlu olmasını sağlar. Lambda ifadeleri gibi özellikler, fonksiyon ifadelerine derlenecektir.
Şu ifade const foo=(bar) => bar.replace('\\t', ''); hedef ES5 olarak ayarlandığında var foo=function (bar) { return bar.replace('\\t', ''); }; olarak derlenir.
Hedefin ES5 veya ES6’ya derlenmesi gerekip gerekmediği, uygulamanızı hangi cihazların/tarayıcıların kullanacağına gerçekten bağlı olacaktır; bu aşamada ES5, uyumluluk açısından kesinlikle daha "güvenli" bir seçim olacaktır. İşte ES6 tarayıcı uyumluluğunu belirlemek için güzel bir kaynak.
Umarım bu şeyleri netleştirmeye yardımcı olur!
