typescript - Modül klasörümdeki tsconfig, üst klasördeki genişletilmiş tsconfig özellik değerlerini geçersiz kılmıyor


Ana klasör store/aisle/fruits'de bir tsconfig.json dosyam var:

{
  "compileOnSave": true,
  "compilerOptions": {
    .
    .
    "target": "es6",
    "noEmitOnError" : true,
    "noEmitHelpers": false,
    "stripInternal": true,
    "removeComments": true,
    "declaration": true
  }
}

Ve hedef özelliğini geçersiz kılmak için store/aisle/fruits/mango içinde bir başka tsconfig.json dosyam var. Price.ts dosyası async/await implementasyonu içeriyor ve bunun üretilecek .js dosyalarında da böyle kalmasını istiyorum; bu nedenle target değerini ES2017 olarak değiştirdim:

{
  "extends": '../tsconfig',
  "compilerOptions": {
    "target": "ES2017"
  },
  "files": ["Price.ts", "index.ts"]
}

Her ne şekilde olursa olsun, tsc mango klasöründeki tsconfig değişikliklerini yakalamıyor gibi görünüyor ve fruits klasöründeki tsconfig dosyasını geçersiz kılmıyor. Bu nedenle, oluşturulan .js dosyası, istemediğim yardımcı fonksiyonları (__awaiter) içeriyor.

Yani, benim sorum, price.js dosyamda sadece async/await kullanıp __awaiter kullanmamak istediğim etkiyi elde etmek için hedef değeri nasıl geçersiz kılabilirim?

Cevap #1

Her proje için child tsconfig.json dosyasını gerçekten oluşturmak için bir çözüm olarak, extends ile parents tsconfig.json dosyasını kullanan her child tsconfig.json dosyasını oluşturarak tsc çalıştırmaktır.

Bunu dinamik olarak yapmak için npm çalışma alanlarını kullanabiliriz.

Örnek proje

.
├── module-a
│   ├── index.ts
│   ├── package.json  // child package json that contains its own script build
│   └── tsconfig.json // child tsconfig
│
├── module-b
│   ├── index.ts
│   ├── package.json  // child package json that contains its own script build
│   └── tsconfig.json // child tsconfig
│
├── package.json      // parent package.json workspace
└── tsconfig.json // parent tscongig

ebeveyn ./package.json çalışma alanı

{
  "name": "workspace-example",
  "version": "1.0.0",
  "workspaces": [
        "module-a", 
        "module-b"
  ]
}

çocuk ./module-a/package.json module-a

{
    "name": "module-a",
    "version": "1.0.0",
    "main": "index.js",
    "scripts": {
      "build" : "tsc" // could be any command
    }
}

ebeveyn ./tsconfig.json ( üzerine yazılacak tüm seçenekleri içerir )

{
    "compilerOptions": {
        "module": "CommonJS",
        "noUnusedLocals": true,
        "sourceMap": false,
        "outDir": "build",
        "target": "ES2017",
      },
      "compileOnSave": true  
}

çocuk ./module-a/tsconfig.json

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "build-module-a", // overriding
        "sourceMap": "true",  // overriding
    }
}

Her bir modülü ayrı ayrı oluşturmak için kök klasör çalışma alanında çalıştırın:

npm run build --workspaces

belirli modülü oluştur

npm run build --workspace=module-a

Not: npm install çalıştırmak, tüm modülleri tek bir node_modules klasörüne kuracaktır

İlgili makaleler