evanw / node-source-map-support

Adds source map support to node.js (for stack traces)
MIT License
2.16k stars 222 forks source link

Cannot find module when `import "source-map-support/register"` #307

Open shishkin opened 2 years ago

shishkin commented 2 years ago

When using import "source-map-support/register" on Typescript 4.5.5 with "module": "ES2020" and "type": "module", I see :

/.../node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:383
    throw new ERR_MODULE_NOT_FOUND(
          ^
CustomError: Cannot find module '/.../node_modules/source-map-support/register' imported from /.../packages/backend/src/cdk.ts
    at finalizeResolution (/.../node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:383:11)
    at moduleResolve (/.../node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:818:10)
    at Object.defaultResolve (/.../node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:929:11)
    at resolve (/.../node_modules/ts-node/src/esm.ts:163:38)
    at ESMLoader.resolve (node:internal/modules/esm/loader:422:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:222:40)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
    at link (node:internal/modules/esm/module_job:75:36)

Root entry point import works without issues:

import sourceMapSupport from "source-map-support";
sourceMapSupport.install();

According to Typescript docs package.json might need explicit "exports" with "types" for the register entry point.

shishkin commented 2 years ago

Crossposted to https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/58679, since that may be the actual culprit.

wisko commented 5 months ago

The problem comes from Node being a bit picky with its module resolution, and requires file endings when importing a specific file. This can be solved by adding the appropriate export properties in the package.json, as stated above.

A workaround solution is to include the file ending in your import statement, like this:

import "source-map-support/register.js"