TypeScript Node.js项目(装饰器+ES模块)调试时装饰器元数据加载异常问题求助
TypeScript Node.js项目(装饰器+ES模块)调试时装饰器元数据加载异常问题求助
各位大佬好,我最近在调试自己的TypeScript Node.js项目时遇到了一个棘手的问题,想过来请教下大家的经验!
先给大家介绍下我的项目情况:
- 项目基于TypeScript + Node.js开发,核心用到了这些配置:
- 开启实验性装饰器(
"experimentalDecorators": true) - 开启装饰器元数据发射(
"emitDecoratorMetadata": true) - 使用ES模块规范(
"module": "NodeNext"和"moduleResolution": "NodeNext") - 用装饰器定义TypeORM实体类
- 开启实验性装饰器(
- 构建和正常运行是没问题的:用
tsc --build编译,启动脚本用tsc-watch监听编译后运行node dist/src/server.js,执行npm start时完全正常,没有任何报错。
但是一到VS Code调试环节就各种踩坑:
- 不管是用ts-node、tsx还是类似工具,总会遇到各种问题:比如识别不了.ts文件扩展名、装饰器元数据加载失败、ES模块导入报错这些。
- 我试了好几种VS Code的
launch.json配置,其中相对能跑起来的一个是这样的:
{ "type": "node", "request": "launch", "name": "Debug Server", "runtimeArgs": ["--loader", "ts-node/esm"], "program": "${workspaceFolder}/src/server.ts", "sourceMaps": true, "skipFiles": ["<node_internals>/**"] }
- 这个配置下服务器确实能启动,但紧接着TypeORM就报错了:
No metadata for "X" was found.
我的数据源是这么创建的:
const ds = new DataSource({ ... entities: ['dist/src/entity/**/*.js'], subscribers: ['dist/src/subscriber/**/*.js'] });
现在我特别困惑的点是:为什么用ts-node/esm运行时,明明服务器能启动,但装饰器元数据却加载不正确呢?有没有大佬遇到过类似的情况,或者能给我一些排查方向呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

