Thanks to visit codestin.com
Credit goes to github.com

Skip to content

resolveJsonModule doesn't copy source file when located within node_modules subdirectory #43940

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
laverdet opened this issue May 4, 2021 · 0 comments
Labels
Bug A bug in TypeScript
Milestone

Comments

@laverdet
Copy link
Contributor

laverdet commented May 4, 2021

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'. ========
@RyanCavanaugh RyanCavanaugh added the Bug A bug in TypeScript label May 13, 2021
@RyanCavanaugh RyanCavanaugh added this to the Backlog milestone May 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript
Projects
None yet
Development

No branches or pull requests

2 participants