克隆项目后用nodemon+ts-node启动server.ts遇.ts扩展名未知错误
启动TS项目时出现ERR_UNKNOWN_FILE_EXTENSION错误
我在笔记本电脑上创建并配置的项目运行一切正常,但在PC上克隆该项目后,执行npm run start启动server.ts时出现如下错误:
megaa@DESKTOP-OIQ46IB MINGW64 /d/Code/Pet-project/server (main) $ npm run start > server-side@1.0.0 start > nodemon --exec ts-node server.ts [nodemon] 2.0.22 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: ts,json [nodemon] starting `ts-node server.ts` TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for D:\Code\Pet-project\server\server.ts at new NodeError (node:internal/errors:405:5) at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9) at defaultGetFormat (node:internal/modules/esm/get_format:142:36) at defaultLoad (node:internal/modules/esm/load:91:20) at nextLoad (node:internal/modules/esm/hooks:733:28) at load (D:\Code\Pet-project\server\node_modules\ts-node\dist\child\child-loader.js:19:122) at nextLoad (node:internal/modules/esm/hooks:733:28) at Hooks.load (node:internal/modules/esm/hooks:377:26) at MessagePort.handleMessage (node:internal/modules/esm/worker:168:24) at [nodejs.internal.kHybridDispatch] (node:internal/event_target:778:20) { code: 'ERR_UNKNOWN_FILE_EXTENSION' } [nodemon] app crashed - waiting for file changes before starting...
我已经尝试过以下操作,但都没解决问题:
- 移除
package.json中的"type": "module"字段 - 使用
nodemon --exec ts-node-esm server.ts或nodemon --exec ts-node --esm server.ts命令启动项目 - 在
tsconfig.json中配置了ts-node的ES模块支持:"ts-node": { "esm": true, "experimentalSpecifierResolution": "node" } - 全局安装了
typescript、tsc、ts-node和nodemon
完整配置文件
tsconfig.json
{ "compilerOptions": { "target": "ES2021", "useDefineForClassFields": true, "module": "ESNext", "lib": [ "ES2021", "DOM", "DOM.Iterable" ], "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "node", "allowImportingTsExtensions": true, "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "esModuleInterop": true, "isolatedModules": true, "noEmit": true, /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" } }
package.json
{ "name": "server-side", "version": "1.0.0", "description": "", "main": "./server.ts", "scripts": { "start": "nodemon --exec ts-node server.ts" }, "author": "", "license": "ISC", "dependencies": { "@types/express": "^4.17.17", "chalk": "^5.2.0", "cors": "^2.8.5", "express": "^4.18.2", "mysql": "^2.18.1", "ts-node": "^10.9.1", "tsc": "^2.0.4" }, "devDependencies": { "@types/cors": "^2.8.13", "@types/mysql": "^2.15.21", "nodemon": "^2.0.22", "typescript": "^5.1.6" } }
若需要更多信息可随时告知。
解决建议
- 对齐依赖版本:删除项目根目录的
node_modules和package-lock.json,重新执行npm install,确保本地依赖版本和笔记本一致,避免全局与本地包版本冲突。 - 修改启动脚本:更新
package.json中的启动命令,明确指定ts-node使用项目配置文件:"scripts": { "start": "nodemon --exec ts-node --project tsconfig.json server.ts" } - 调整模块解析策略:将
tsconfig.json中的moduleResolution从node改为bundler,适配ESNext模块配置:"moduleResolution": "bundler" - 检查Node.js版本:确认PC上的Node.js版本与笔记本一致,推荐使用v18及以上版本,ES模块支持更稳定。
内容的提问来源于stack exchange,提问作者Lvasche
相关产品推荐
相关产品推荐

