microsoft / microsoft/TypeScript

`tsBuildInfoFile` is not extendable. Add an alternative `tsBuildInfoDir` option

Offen
#61,794 0 Kommentare 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

🔍 Search Terms

tsBuildInfoFile tsbuildinfo output directory

✅ Viability Checklist
⭐ Suggestion

Add a tsBuildInfoDir config option for specifying the output directory for the .tsbuildinfo file.

📃 Motivating Example
tsconfig/
├── tsconfig.base.json
├── tsconfig.client.json
├── tsconfig.config.json
└── tsconfig.server.json
tsconfig.json

With a project structure like this, there is no way to have the individual project configs (tsconfig.client.ts etc.) derive their tsBuildInfoFile setting from the base config (tsconfig.base.json). If we set tsBuildInfoFile to some custom value in the base config, the individual project configs all end up having the same output path for their .tsbuildinfo files, which is of course wrong, so we have no better option than to set tsBuildInfoFile for each of the projects individually.

The recently introduced ${configDir} template variable can't help us here since the config files are all located in the same folder. Even if they weren't, it still wouldn't give us enough flexibility.

One possible solution is to rely on the outDir option which also affects where .tsbuildinfo files are placed, but it's only fine if we don't mind them being placed beside other output files, or if there are no other output files because we are using noEmit.

What I suggest is adding a tsBuildInfoDir option for specifying the output directory for the .tsbuildinfo file as an alternative to tsBuildInfoFile. The process of determining how the file is placed within that directory should be identical to that of outDir / declarationDir, meaning that the config file's placement relative to rootDir should be replicated.

With the following tsconfig.base.json,

// tsconfig.base.json
{
  "compilerOptions": {
    "rootDir": "${configDir}",
    "outDir": "${configDir}/dist",
    "tsBuildInfoDir": "./node_modules/.tsbuildinfo",
    "incremental": true
  }
}

this would enable structure as complicated as this one:

client/
│── dist/
│   │── index.js
│── index.ts
└── tsconfig.client.json
node_modules/
└── .tsbuildinfo/
    ├── tsconfig.client.tsbuildinfo
    ├── tsconfig.config.tsbuildinfo
    ├── tsconfig.server.tsbuildinfo
    └── tsconfig.tsbuildinfo
server/
│── dist/
│   │── index.js
│── index.ts
└── tsconfig.server.json
tsconfig.base.json
tsconfig.config.json
tsconfig.json
vite.config.ts

Here is what I assumed about the other config files:

Click to expand
// client/tsconfig.client.json
{
  "include": ["**/*.ts"]
}

// client/tsconfig.server.json
{
  "include": ["**/*.ts"]
}

// tsconfig.config.json
{
  "compilerOptions": {
    "noEmit": true
  },
  "include": ["*.config.ts"]
}

// tsconfig.json
{
  "files": [],
  "references": [
    { "path": "./client/tsconfig.client.json" },
    { "path": "./server/tsconfig.server.json" },
    { "path": "./tsconfig.config.json" }
  ]
}

When both tsBuildInfoDir and tsBuildInfoFile are set, the latter could be interpreted as the desired file name rather than the path (the path is then ${tsBuildInfoDir}/${tsBuildInfoFile}).

💻 Use Cases
  1. What do you want to use this for?
    → Putting .tsbuildinfo files under node_modules/.tsbuildinfo so that they are not in the way, but I still get the advantages of incremental builds.
  2. What shortcomings exist with current approaches?
    → The shortcomings of tsBuildInfoFile and outDir are described above.
  3. What workarounds are you using in the meantime?
    → Setting tsBuildInfoFile for each project individually :(

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Es werden keine Quelldateien oder Tests genannt. Beginne damit nachzuverfolgen, wie tsBuildInfoFile, outDir und declarationDir die Build-Info-Pfade bestimmen und wie geerbte Konfiguration aufgelöst wird. Die Arbeit ist abgeschlossen, wenn eine tsBuildInfoDir-Option das vorgeschlagene Verzeichnislayout unterstützt, das bestehende Verhalten beibehält und die hier beschriebenen Konfigurationsbeispiele und Wechselwirkungen abgedeckt sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
build-system, compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.