microsoft / microsoft/TypeScript
`resolveJsonModule` doesn't copy source file when located within `node_modules` subdirectory
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
Bug Report
🔎 Search Terms
resolveJsonModule json node_modules
🕗 Version & Regression Information
Version 4.2.4
macOS 11.3
The issue seems very old, at least TS v3.4 is also affected.
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about tsconfig.json
💻 Code
tsconfig.json
{
"compilerOptions": {
"baseUrl": "src",
"rootDir": "src",
"outDir": "dist",
"resolveJsonModule": true,
},
}
src/index.ts
import * as json from './config.json';
src/config.json
{}
🙁 Actual behavior
When I run tsc the output in dist contains index.js and config.json. This is good and expected. If any parent directory is named node_modules then the JSON file will no longer be copied. A full terminal session of this phenomenon is included below:
marcel@marcel ~/tmp $ ls -lah
total 0
drwxr-xr-x 3 marcel staff 96B May 4 02:22 .
drwxr-xr-x 84 marcel staff 2.6K May 4 02:22 ..
drwxr-xr-x 4 marcel staff 128B May 4 02:21 test
marcel@marcel ~/tmp $ cd test
marcel@marcel ~/tmp/test $ ls -lah
total 8
drwxr-xr-x 4 marcel staff 128B May 4 02:21 .
drwxr-xr-x 3 marcel staff 96B May 4 02:22 ..
drwxr-xr-x 4 marcel staff 128B May 4 02:13 src
-rw-r--r-- 1 marcel staff 119B May 4 02:14 tsconfig.json
marcel@marcel ~/tmp/test $ npx tsc
marcel@marcel ~/tmp/test $ cat dist/config.json
{}
marcel@marcel ~/tmp/test $ cd ..
marcel@marcel ~/tmp $ mkdir node_modules
marcel@marcel ~/tmp $ mv test node_modules
marcel@marcel ~/tmp $ cd node_modules/test
marcel@marcel ~/tmp/node_modules/test $ rm -rf dist
marcel@marcel ~/tmp/node_modules/test $ npx tsc
marcel@marcel ~/tmp/node_modules/test $ cat dist/config.json
cat: dist/config.json: No such file or directory
marcel@marcel ~/tmp/node_modules/test $ ls dist
index.js
🙂 Expected behavior
It is unexpected that the name of a parent directory would affect the compiler in this manner.
Additional information
If I invoke the compiler with the --traceResolution option the output is almost exactly the same but an additional line is logged in the node_modules parent case. The full log follows and the additional line is annotated inline. This diagnostic message does not appear when node_modules is found in the parent hierarchy.
======== Resolving module './config.json' from '/Users/marcel/tmp/node_modules/hello/test/src/index.ts'. ========
Module resolution kind is not specified, using 'NodeJs'.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'TypeScript'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.ts' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.tsx' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.d.ts' does not exist.
Directory '/Users/marcel/tmp/node_modules/hello/test/src/config.json' does not exist, skipping all lookups in it.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'JavaScript'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.js' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.jsx' does not exist.
Directory '/Users/marcel/tmp/node_modules/hello/test/src/config.json' does not exist, skipping all lookups in it.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'Json'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json' exist - use it as a name resolution result.
File '/Users/marcel/tmp/node_modules/hello/package.json' does not exist.
^----- THIS LINE IS ADDED
======== Module name './config.json' was successfully resolved to '/Users/marcel/tmp/node_modules/hello/test/src/config.json'. ========
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez le problème avec tsconfig.json, src/index.ts et src/config.json, en plaçant le projet sous un répertoire parent node_modules. Commencez par exécuter tsc avec --traceResolution et comparez les fichiers dist générés ainsi que les diagnostics avec ceux du projet situé en dehors de node_modules. C’est terminé lorsque le fichier JSON résolu est copié dans dist aux deux emplacements.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100