microsoft / microsoft/TypeScript

`libReplacement: true` lookup folder should be configurable (via `typeRoots` ?)

Offen
#63,448 5 Kommentare 1 Reaktion 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
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

### 🔎 Search Terms

When `libReplacement: true` is used, for example
```
"libReplacement": true,
"lib": ["dom", "esnext"],
```
It is currently not possible to instruct the TS compiler to look for `@typescript/lib-dom/` in a custom folder, which makes it impossible to leverage `libReplacement: true` in setups where the folder does not reside in the parent chain (real-world scenario in the Chromium repository). For example adding something as follows has no effect.

```
"typeRoots": [
"./some/sibling/folder/node_modules/@typescript", <-- Does not work
"./some/sibling/folder/node_modules/@typescript/lib-dom" <-- Does not work either
],
```
Pasting `--traceResolution` output for reference.
```
======== Resolving module '@typescript/lib-dom' from '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/tools/eslint/__lib_node_modules_lookup_lib.dom.d.ts__.ts'. ========
Explicitly specified module resolution kind: 'Node10'.
Loading module '@typescript/lib-dom' from 'node_modules' folder, target file types: TypeScript, Declaration.
Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/tools/eslint/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/tools/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/out/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/src/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/chromium/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/workspace/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/home/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/local/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/usr/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Directory '/node_modules' does not exist, skipping all lookups in it.
Scoped package detected, looking in 'typescript__lib-dom'
Loading module '@typescript/lib-dom' from 'node_modules' folder, target file types: JavaScript.
Searching all ancestor node_modules directories for fallback extensions: JavaScript.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/tools/eslint/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/tools/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/resources/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/webui/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/ui/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/gen/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/gchrome/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/out/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/src/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/chromium/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/workspace/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/home/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/local/node_modules' does not exist, skipping all lookups in it.
Directory '/usr/node_modules' does not exist, skipping all lookups in it.
Directory '/node_modules' does not exist, skipping all lookups in it.
======== Module name '@typescript/lib-dom' was not resolved. ========
```
Or if `typeRoots` is not the right way, there should be some way to customize where to look.

Let me know if you think a minimal repro is needed. Skipping for now as the above setup seems easy to reproduce.

### 🕗 Version & Regression Information

Reproducing on v 6.0.2. Did not try previous versions.

### 🙁 Actual behavior

No way exists to tell `tsc` where to locate the `@typescript/lib-dom/` folder.

### 🙂 Expected behavior

There should be a way tell `tsc` where to locate the `@typescript/lib-dom/` folder, similar to how this is done with `typeRoots` for types listed in `types`.

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

Beginne damit, die Konfiguration mit libReplacement, typeRoots und --traceResolution zu reproduzieren, und verfolge dann, wie tsc @typescript/lib-dom auflöst. Vergleiche die Suche mit dem Verhalten von typeRoots und definiere einen Konfigurationspfad, der für benachbarte Ordner funktioniert; abgeschlossen ist die Aufgabe, wenn der benutzerdefinierte Speicherort zuverlässig aufgelöst wird und die Regressionstestabdeckung dies verifiziert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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