microsoft / microsoft/TypeScript

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

Aperta
#63,448 5 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Awaiting More Feedback Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

### 🔎 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`.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo la configurazione con libReplacement, typeRoots e --traceResolution, quindi traccia il modo in cui tsc risolve @typescript/lib-dom. Confronta la ricerca con il comportamento di typeRoots e definisci un percorso di configurazione che funzioni per cartelle sorelle; il lavoro è completato quando la posizione personalizzata viene risolta in modo affidabile e la copertura di regressione lo verifica.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.