TypeScript 3 ile dist/ klasörüne derleme yaparken src/ klasör yapısını koruyun


Bu yapıda bir TypeScript Node.js sunucum var:

tsconfig.json
package.json
src/
    middleware/
    utils/
    index.ts
dist/
    middleware/
    utils/
    index.js

TypeScript 2 kullanırken, projemi src/ klasöründen dist/ klasörüne derleyebiliyor ve üzerinde çalışmak için dizin yapımın bir aynasını elde edebiliyordum.

TypeScript 3'ün yayınlanmasıyla birlikte, proje referanslarını tanıttılar ve kodun bir çıktı dizinine nasıl derlendiği şeklini değiştirdiler. Artık tsc, dist/ klasörüne bu şekilde iç içe geçmiş olarak çıktı veriyor:

dist/
    src/
        middleware/
        utils/
        index.js

Benim tsconfig.json dosyam şudur:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "allowJs": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "declaration": false,
    "outDir": "dist/",
    "lib": [
      "es7",
      "dom"
    ]
  },
  "include": [
    "src/"
  ]
}

TypeScript'i src/ klasörümü dist/ klasörüne ayna görüntüsü olarak nasıl çıktı verecek şekilde yapılandırabilirim?

Cevap #1

TypeScript projesine ilk geçiş yaptığımda benzer bir sorun yaşamıştım. Ayrıca resolveJsonModule: true olarak ayarladım ve src dizini çıktı dist dizinine kopyalandı.

Temel sebep, kaynak dosyalarımdan birinin projede kökteki package.json dosyasını require etmesiydi. Bunu kaldırdıktan sonra, tsc artık src'i dist dizinine eklemiyordu.

Kısacası, src dizininizin dışındaki dosyaları gerektirmediğinizden emin olun.

Açıklayıcı SSS burada: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-does---outdir-moves-output-after-adding-a-new-file

Cevap #2

Çıkış dizininin yapısı, compilerOptions içindeki rootDir ile kontrol edilir. Belgeler için buraya bakın, bunu ./src olarak ayarlamak sorunu çözmelidir.

{
  "compilerOptions": {
    "rootDir": "src",
    ...
  },
  "include": [
    "src/"
  ]
}

Cevap #3

TypeScript 2'den 3'e yükseltme tek başına davranışı değiştirmemeli; bunu doğrulayabilirsek, bu bir hata olabilir. Her durumda, rootDir derleyici seçeneğinin src dizininizi gösterdiğinden ve üst dizini göstermediğinden emin olun, çünkü rootDir altındaki yapı outDir altında yansıtılır.

Cevap #4

compilerOptions.outDir'yi belirtmeye ek olarak, tsconfig.json'da compilerOptions.rootDir'yi belirtin.

{
  "compilerOptions": {
     // ...
    "outDir": "dist",
    "rootDir": "./",
    // ...
  }
}

Sonra, tsconfig.json dosyasının bulunduğu klasörün içinde $ tsc -b komutunu çalıştırın.

Not: compilerOptions.rootDir, tsconfig.json dosyasının bulunduğu klasörde, iç içe olmayan bir klasörün dosya yapısını dahil etmek istediğinizde kullanılmalıdır.

İlgili makaleler