microsoft / microsoft/TypeScript
strange interaction with `resolveJsonModule`, `createRequire`, naming it `require`, and requiring JSON
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
🔎 Search Terms
esm resolveJsonModule
🕗 Version & Regression Information
This isn't reproducible in the playground because the TSConfig editor, unlike in reality, doesn't allow you to configure resolveJsonModule when module is NodeNext.
⏯ Playground Link
n/a
💻 Code
Here's my config:
{
"extends": "@ljharb/tsconfig", // this sets resolveJsonModule to true
"compilerOptions": {
"target": "ESNext",
"module": "NodeNext",
"moduleResolution": "NodeNext",
},
"exclude": [
"coverage",
],
}
@ljharb/tsconfig sets resolveJsonModule to true.
Here's my code:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('./package.json');
🙁 Actual behavior
When resolveJsonModule is locally omitted or set to true, I get error TS6133: 'require' is declared but its value is never read. on the const require = declaration.
When it's locally set to false, I get that error AND error TS2732: Cannot find module '../package.json'. Consider using '--resolveJsonModule' to import module with '.json' extension. on the require() call.
However, when I rename it from require to literally anything else, the errors disappear for all three config variations.
🙂 Expected behavior
I should be able to name a variable require in an ES Module without it having any implied semantics, since require only exists by default in CJS.
Additional information about the issue
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la configurazione NodeNext fornita e il codice che usa createRequire(import.meta.url), quindi riproduci le diagnostica omettendo, abilitando e disabilitando resolveJsonModule. Confronta questi risultati con quelli dello stesso codice dopo aver rinominato la variabile require locale; il lavoro è completato quando il nome della variabile non modifica più i diagnostica relativi a variabili non utilizzate o moduli JSON in un modulo ES.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 48/100