Skip to content

[Node 19 + ESM + PNP] ERR_MODULE_NOT_FOUND #1972

Closed
@rtritto

Description

@rtritto

Search Terms

I'm starting a new project with yarn berry (Plug'n'Play enabled) and using ESM to test Node 19 features.

Expected Behavior

No ERR_MODULE_NOT_FOUND error

Actual Behavior

C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:757
  throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base));
        ^
CustomError: Cannot find package 'undici' imported from C:\<PROJECT_PATH>\test-pnp-node\example.ts
    at packageResolve (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:757:9)
    at moduleResolve (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:798:18)
    at Object.defaultResolve (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\dist-raw\node-internal-modules-esm-resolve.js:912:11)
    at C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\esm.ts:218:35
    at entrypointFallback (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\esm.ts:168:34)
    at C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\esm.ts:217:14
    at addShortCircuitFlag (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\esm.ts:409:21)
    at resolve (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\esm.ts:197:12)
    at resolve (C:\<PROJECT_PATH>\test-pnp-node\.yarn\__virtual__\ts-node-virtual-6c4c0611aa\3\Users\<USER>\AppData\Local\Yarn\Berry\cache\ts-node-npm-10.9.1-6c268be7f4-9.zip\node_modules\ts-node\src\child\child-loader.ts:15:39)
    at nextResolve (node:internal/modules/esm/hooks:654:28)

Steps to reproduce the problem

  • yarn init -y
  • yarn set version canary
  • yarn add undici typescript ts-node @types/node
  • in package.json
    • add "type": "module"
    • change main to example.ts (optional/useless step)
  • in .yarnrc.yml add nodeLinker: pnp (optional/useless step, Plug'n'Play is already enabled by default)
  • create tsconfig.json file:
{
  "compilerOptions": {
    "esModuleInterop": true,  // optional/irrelevant
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "nodenext"  // irrelevant using node or bundler
  },
  "ts-node": {
    "esm": true
    // "experimentalSpecifierResolution": "node"  // optional/irrelevant
  }
}
  • create example.ts file
import { request } from 'undici'

request('')
  • yarn ts-node example.ts

Minimal reproduction

https://github.com/rtritto/ts-node-repros/tree/test-pnp-node

Specifications

  • ts-node version: 10.9.1

  • node version: 19.8.1

  • TypeScript version: 5.0.2

  • package.json:

{
  "name": "test-pnp-node",
  "version": "1.0.0",
  "main": "index.ts",
  "type": "module",
  "license": "MIT",
  "packageManager": "[email protected]",
  "dependencies": {
    "@types/node": "^18.15.3",
    "ts-node": "^10.9.1",
    "typescript": "^5.0.2",
    "undici": "^5.21.0"
  }
}
  • Operating system and version:
    Windows
  • If Windows, are you using WSL or WSL2?:
    No
  • Correctly work with nodeLinker: node-modules

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions