如何在VS Code中让nodemon适配TypeScript编写的ECMAScript模块?
解决TypeScript ESM项目中Nodemon即时调试问题
问题背景
使用TypeScript开发Node.js 18+应用,目标部署到Azure App Service,采用ECMAScript模块(ESM)模式以支持顶级await等特性。项目可正常构建运行,但无法通过nodemon实现即时调试,运行yarn debug时出现两类错误:
--inspect参数被ts-node识别为未知选项- 移除
--inspect后,出现Unknown file extension ".ts"错误
错误原因分析
- 调试参数传递错误:ts-node的ESM模式下,
--inspect需直接传递给Node.js,而非作为ts-node的命令选项 - ESM模块解析未配置:默认状态下ts-node未启用ESM支持,无法识别.ts格式的ESM模块文件
解决方案
1. 修改nodemon.json配置
将调试参数直接传给Node.js,并通过ts-node的ESM加载器处理TypeScript文件:
{ "watch": ["src"], "ext": "ts,json", "exec": "node --inspect --loader ts-node/esm ./src/app.ts" }
--inspect:直接传递给Node.js,启用调试端口监听(默认9229)--loader ts-node/esm:指定使用ts-node的ESM加载器解析.ts文件,解决扩展名识别错误
2. 优化tsconfig.json配置(推荐)
为严格适配Node.js的ESM模块解析规则,调整编译选项:
{ "compilerOptions": { // 保留原有其他配置,修改以下两项 "module": "node16", "moduleResolution": "node16" } }
node16模式会严格遵循Node.js的ESM与CommonJS模块解析逻辑,避免潜在的导入路径问题。
3. 验证命令行调试
运行yarn debug,此时nodemon会正常启动,监听src目录下的文件变更,同时Node.js会开启调试端口,可通过调试工具正常连接。
4. 优化VS Code launch.json配置
调整调试配置,确保VS Code能自动连接到nodemon启动的进程:
{ "version": "0.2.0", "configurations": [ { "name": "Debug via Nodemon", "type": "node", "request": "launch", "runtimeExecutable": "yarn", "runtimeArgs": ["nodemon"], "skipFiles": ["<node_internals>/**"], "console": "integratedTerminal", "env": { "NODE_ENV": "development" } } ] }
启动该配置后,VS Code会自动连接调试端口,实现文件变更时自动重启服务并保持调试会话。
内容的提问来源于stack exchange,提问作者John Bergqvist
相关产品推荐
相关产品推荐

