typescript - Att utöka tsconfig.json-filen verkar inte utöka något


Jag har ett projekt från vilket jag behöver bygga två olika produkter. Säg att jag har

./src/advanced
./src/basic

All kod är skriven i Typescript så jag behöver kompilera detta med tsc

På grund av detta skapade jag 3 tsconfig-filer

tsconfig-bas.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./src",
    "lib": ["es2018", "dom", "dom", "dom.iterable", "es6"],
    "importHelpers": true,
  },
  "exclude": ["node_modules", "**/*.spec.ts","dist"]

Nu för att bygga basic-produkten jag har

tsconfig-basic.json

{
  "extends": "./tsconfig-base.json",
  "compilerOptions": {
    "noEmitHelpers": true
  },
  "files": [
     "basic/main.ts"
  ]
}

Och jag kompilerar på följande sätt

$> tsc -p ./tsconfig-basic.json

Nu har jag 2 problem

1) Filen basic/main.ts kan inte hittas, den söker i ./basic/main.ts medan det borde ha varit ./src/basic/main.ts. Varför är inte baseUrl förhandsadds?

2) Om (1) är fast, skrivs de kompilerade filerna inte till ./dist. Varför används inte "outDir": "./dist från basfilen här? När jag lägger till outDir i tsconfig-basic.json fungerar det som förväntat

Hur som helst, det ser ut som om att förlänga här inte fungerar, eller fungerar annorlunda än jag förväntar mig. Något förslag på hur jag kan förbättra min setup?

Svar #1

1) baseUrl är endast avsedd att användas med bundlers som webpack. Se diskussionen på TypeScript/10866

2) Detta är tyvärr avsiktligt. Se ärende TypeScript/29172

Citat av Wesley Wigham (Microsoft-anställd):
Kompilatoralternativ baserade på sökväg (outDir, outFile, rootDir, include, files) löses från konfigurationsfilen de hittas i)

Du kommer att behöva upprepa outDir för varje tsconfig.json-fil du har.

Svar #2

Det finns dock ett trick. Om du skapar en symlink till bas-Tsconfig-filen från en relevant katalog och utökar den länkade versionen istället för originalet, kommer alla sökvägar att lösas enligt dina förväntningar.

Relaterade artiklar