Solved: ERR_MODULE_NOT_FOUND
Environment
Operating system
macOS 11.6.1
node.js runtime
16.13.1
package.json
{ "name": "repro", "version": "0.0.0", "description": "repro", "type": "module", "engines": { "node": ">= 16.13 <17" }, "devDependencies": { "@tsconfig/node16": "^1.0.2", "@types/jest": "~27.4", "@types/node": "~16.11", "@typescript-eslint/eslint-plugin": "~5.14", "@typescript-eslint/parser": "~5.14", "eslint": "~8.11", "eslint-config-prettier": "~8.5", "eslint-plugin-jest": "~26.1", "jest": "~27.5", "prettier": "~2.5", "rimraf": "~3.0", "ts-jest": "~27.1", "tsutils": "~3.21", "typescript": "~4.6" }, "scripts": { "start": "node build/src/main.js", "clean": "rimraf coverage build tmp", "prebuild": "npm run lint", "build": "tsc -p tsconfig.json", "build:watch": "tsc -w -p tsconfig.json", "build:release": "npm run clean && tsc -p tsconfig.release.json", "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "test": "jest --coverage", "test:watch": "jest --watch" }, "author": "blakedietz", "license": "Apache-2.0", "dependencies": { "puppeteer": "^13.5.2", "tslib": "~2.3.1" } }
tsconfig.json
{ "compilerOptions": { "target": "ES2020", "module": "ES2020", "moduleResolution": "node", "rootDir": ".", "outDir": "build", "allowSyntheticDefaultImports": true, "allowJs": true, "importHelpers": true, "alwaysStrict": true, "sourceMap": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitAny": false, "noImplicitThis": false, "strictNullChecks": false }, "include": ["src/**/*", "__tests__/**/*"] }
File that was failing
import { scrape } from "./example-path/index"; // ...
Reproduction
node ./build/src/main.js internal/process/esm_loader.js:74 internalBinding('errors').triggerUncaughtException( ^ Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/blakedietz/projects/<redacted>/build/src/<redacted>/index' imported from /Users/blakedietz/projects/blakedietz/<redacted>/build/src/main.js at finalizeResolution (internal/modules/esm/resolve.js:271:11) at moduleResolve (internal/modules/esm/resolve.js:694:10) at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:784:11) at Loader.resolve (internal/modules/esm/loader.js:100:40) at Loader.getModuleJob (internal/modules/esm/loader.js:246:28) at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:47:40) at link (internal/modules/esm/module_job.js:46:36) { code: 'ERR_MODULE_NOT_FOUND' }
Error
Solutions
Either of the following solutions will fix your problem.
Add a js file extension (even though the source is .ts)
// src/main.ts import { scrape } from "./example-path/index.js"; // ... rest of file
// src/example-path/index.ts export function scrape() { //... } //...
Pass experimental flags to node
node --experimental-modules --es-module-specifier-resolution=node ./build/src/main.js