TypeStrong/ts-node

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"

luyifo opened this issue · 14 comments

Search Terms

When the node version is 18.20.0, running TS-node --esm **.ts displays TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts". Runs successfully after the Node version is reduced to 16.20.2.

PS D:\Testspace\ts-node-demo> pn dev

> ts-node-demo@1.0.0 dev D:\Testspace\ts-node-demo
> ts-node-esm src/index.ts

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for D:\Testspace\ts-node-demo\src\index.ts
    at new NodeError (node:internal/errors:405:5)
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:136:11)
    at defaultGetFormat (node:internal/modules/esm/get_format:182:36)
    at defaultLoad (node:internal/modules/esm/load:101:20)
    at nextLoad (node:internal/modules/esm/hooks:864:28)
    at load (D:\Testspace\ts-node-demo\node_modules\.pnpm\ts-node@10.9.2_@types+node@20.14.2_typescript@5.4.5\node_modules\ts-node\dist\child\child-loader.js:19:122)
    at nextLoad (node:internal/modules/esm/hooks:864:28)
    at Hooks.load (node:internal/modules/esm/hooks:447:26)
    at MessagePort.handleMessage (node:internal/modules/esm/worker:196:24)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:786:20) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
 ELIFECYCLE  Command failed with exit code 1.
PS D:\Testspace\ts-node-demo> nvm list

  * 18.20.0 (Currently using 64-bit executable)
    16.20.2
PS D:\Testspace\ts-node-demo> nvm use 16.20.2
Now using node v16.20.2 (64-bit)
PS D:\Testspace\ts-node-demo> pn dev

> ts-node-demo@1.0.0 dev D:\Testspace\ts-node-demo
> ts-node-esm src/index.ts

hello world
PS D:\Testspace\ts-node-demo> 

Expected Behavior

Actual Behavior

Steps to reproduce the problem

Minimal reproduction

Specifications

  • ts-node version: 10.9.2
  • node version: 18.20.0
  • TypeScript version: 5.4.5
  • tsconfig.json, if you're using one:
{
  "compilerOptions": {
    "rootDir": "./src",
    "target": "es2016", 
    "module": "NodeNext", 
    "moduleResolution": "NodeNext",
    "esModuleInterop": true, 
    "forceConsistentCasingInFileNames": true, 
    "strict": true, 
    "skipLibCheck": true, 
    "verbatimModuleSyntax": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true
  }
}
  • package.json:
{
  "type": "module",
  "name": "ts-node-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "ts-node-esm src/index.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "ts-node": "^10.9.2",
    "typescript": "^5.4.5"
  }
}
  • Operating system and version: Windows 11 Pro 10.0.22631 Build 22631
  • If Windows, are you using WSL or WSL2?:

I had the same issue, downgrade Node to 18.18 help.
My engines:

"engines": {
    "node": ">=18.18.0 <18.19.0"
  },

Have you solved this problem?I switched the versions of 22,18 and 16 with different problems, and the configuration file has been modified, but it still doesn't work

"module": "CommonJS", "esModuleInterop": true,

My code compilation is no problem, I specially configured a file for "ts-node", code compilation is another file, anyway just to see the state of writing code, so I specially configured a file for "ts-node", compilation is another file;"tsconfig.dev.json"and"tsconfig.json"

"dev": "cross-env TS_NODE_PROJECT=tsconfig.dev.json nodemon --exec ts-node src/main.ts",
"dev": "cross-env TS_NODE_PROJECT=tsconfig.dev.json nodemon --exec ts-node src/main.ts",

seems to work for me with node and --loader flag

{
  "scripts": {
-    "not-work": "ts-node-esm src/main.ts",
+    "dev": "node --loader ts-node/esm --no-warnings=ExperimentalWarning src/main.ts"
  }
}

node: v20.5.0
ts-node: v10.9.2

seems to work for me with node and --loader flag

{
  "scripts": {
-    "not-work": "ts-node-esm src/main.ts",
+    "dev": "node --loader ts-node/esm --no-warnings=ExperimentalWarning src/main.ts"
  }
}

node: v20.5.0 ts-node: v10.9.2

This worked for me. Thanks @lhapaipai

try to use tsx instead. It works flawlessly for me.

seems to work for me with node and --loader flag

{
  "scripts": {
-    "not-work": "ts-node-esm src/main.ts",
+    "dev": "node --loader ts-node/esm --no-warnings=ExperimentalWarning src/main.ts"
  }
}

node: v20.5.0 ts-node: v10.9.2

worked for me too thanks