Skip to content

Path mapping doesn't work with modules ending in ".js" #15962

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

Closed
alexeagle opened this issue May 19, 2017 · 2 comments
Closed

Path mapping doesn't work with modules ending in ".js" #15962

alexeagle opened this issue May 19, 2017 · 2 comments
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue

Comments

@alexeagle
Copy link
Contributor

Path mapping lets me locate most modules with *, but not those ending with .js.

Repro:

./node_modules/.bin/tsc -v
Version 2.3.2

# Put the zone.js npm package in a place other than node_modules
$ yarn add zone.js
$ mkdir other_node_modules
$ mv node_modules/zone.js other_node_modules/

$ cat index.ts
import {} from 'zone.js';
let z: Zone;

$ cat tsconfig.json
{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "baseUrl": "./",
    "traceResolution": true,
    "paths": {
      "*": [
        "other_node_modules/*"
      ]
    }
  },
  "files": [
    "index.ts"
  ]
}

$ ./node_modules/.bin/tsc
======== Resolving module 'zone.js' from '/Users/alexeagle/repro2/index.ts'. ========
Module resolution kind is not specified, using 'NodeJs'.
'baseUrl' option is set to '/Users/alexeagle/repro2/', using this value to resolve non-relative module name 'zone.js'.
'paths' option is specified, looking for a pattern to match module name 'zone.js'.
Module name 'zone.js', matched pattern '*'.
Trying substitution 'other_node_modules/*', candidate module location: 'other_node_modules/zone.js'.
File '/Users/alexeagle/repro2/other_node_modules/zone.js' does not exist.
Loading module 'zone.js' from 'node_modules' folder, target file type 'TypeScript'.
File '/Users/alexeagle/repro2/node_modules/zone.js.ts' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.js.tsx' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.js.d.ts' does not exist.
File name '/Users/alexeagle/repro2/node_modules/zone.js' has a '.js' extension - stripping it.
File '/Users/alexeagle/repro2/node_modules/zone.ts' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.tsx' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.d.ts' does not exist.
Directory '/Users/alexeagle/repro2/node_modules/@types' does not exist, skipping all lookups in it.
File name '/Users/alexeagle/repro2/node_modules/@types/zone.js' has a '.js' extension - stripping it.
Directory '/Users/alexeagle/node_modules' does not exist, skipping all lookups in it.
File name '/Users/alexeagle/node_modules/zone.js' has a '.js' extension - stripping it.
File name '/Users/alexeagle/node_modules/@types/zone.js' has a '.js' extension - stripping it.
Directory '/Users/node_modules' does not exist, skipping all lookups in it.
File name '/Users/node_modules/zone.js' has a '.js' extension - stripping it.
File name '/Users/node_modules/@types/zone.js' has a '.js' extension - stripping it.
Directory '/node_modules' does not exist, skipping all lookups in it.
File name '/node_modules/zone.js' has a '.js' extension - stripping it.
File name '/node_modules/@types/zone.js' has a '.js' extension - stripping it.
'baseUrl' option is set to '/Users/alexeagle/repro2/', using this value to resolve non-relative module name 'zone.js'.
'paths' option is specified, looking for a pattern to match module name 'zone.js'.
Module name 'zone.js', matched pattern '*'.
Trying substitution 'other_node_modules/*', candidate module location: 'other_node_modules/zone.js'.
File '/Users/alexeagle/repro2/other_node_modules/zone.js' does not exist.
Loading module 'zone.js' from 'node_modules' folder, target file type 'JavaScript'.
File '/Users/alexeagle/repro2/node_modules/zone.js.js' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.js.jsx' does not exist.
File name '/Users/alexeagle/repro2/node_modules/zone.js' has a '.js' extension - stripping it.
File '/Users/alexeagle/repro2/node_modules/zone.js' does not exist.
File '/Users/alexeagle/repro2/node_modules/zone.jsx' does not exist.
Directory '/Users/alexeagle/node_modules' does not exist, skipping all lookups in it.
File name '/Users/alexeagle/node_modules/zone.js' has a '.js' extension - stripping it.
Directory '/Users/node_modules' does not exist, skipping all lookups in it.
File name '/Users/node_modules/zone.js' has a '.js' extension - stripping it.
Directory '/node_modules' does not exist, skipping all lookups in it.
File name '/node_modules/zone.js' has a '.js' extension - stripping it.
======== Module name 'zone.js' was not resolved. ========
index.ts(2,8): error TS2304: Cannot find name 'Zone'.

As a workaround, if my tsconfig bypasses the lookup of the package.json file to point directly to the d.ts file:

    "paths": {
      "*": [
        "other_node_modules/*"
      ],
      "zone.js": [
        "other_node_modules/zone.js/dist/zone.js.d.ts"
      ]
    }

Then the program type-checks.

@mhegazy mhegazy added the Bug A bug in TypeScript label May 19, 2017
@mhegazy mhegazy assigned ghost May 19, 2017
@mhegazy mhegazy added this to the TypeScript 2.4 milestone May 19, 2017
@DanielRosenwasser
Copy link
Member

DanielRosenwasser commented May 19, 2017

For context, a similar previous issue #12098.

Does this still occur if you use --allowJs?

Ah it's a directory. Thanks @mhegazy 😄

@alexeagle
Copy link
Contributor Author

Nope, can still repro with --allowJs.

@mhegazy mhegazy added the Fixed A PR has been merged for this issue label May 23, 2017
@ghost ghost closed this as completed in #16023 May 23, 2017
@microsoft microsoft locked and limited conversation to collaborators Jun 14, 2018
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue
Projects
None yet
Development

No branches or pull requests

3 participants