You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode调试时ts-node/register执行旧编译JS而非指定TS文件

问题描述

在Visual Studio Code的TypeScript项目中,使用以下launch.json配置调试Azure DevOps流水线任务扩展:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch task",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/src/index.ts",
      "cwd": "${workspaceFolder}/src",
      "runtimeArgs": [
        "-r",
        "ts-node/register"
      ],
      "env": {
        "NODE_ENV": "development"
      },
      "sourceMaps": true
    }
  ]
}

项目通过NPM脚本打包,tsconfig.json配置将编译后的JS文件输出到./bin目录:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "sourceMap": true,
    "outDir": "./bin",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  }
}

打包后修改TS源码,运行调试配置时,实际执行的是bin目录下的旧index.js而非src/index.ts,调试控制台显示:

C:\Program Files\nodejs\node.exe -r ts-node/register ...\bin\index.js
删除bin目录后才会正常执行src/index.ts:
C:\Program Files\nodejs\node.exe -r ts-node/register .\index.ts

需要找到配置或CLI选项,强制ts-node重新编译源码,避免调试旧版本代码。

解决方案

1. 让ts-node忽略编译输出目录

在项目根目录创建ts-node.json配置文件,指定忽略bin目录,让ts-node直接跳过该目录下的文件,优先加载TS源码:

{
  "skipIgnore": false,
  "ignore": ["bin/**/*"]
}

也可以直接在launch.json的runtimeArgs中添加忽略参数:

"runtimeArgs": [
  "-r",
  "ts-node/register",
  "--ignore",
  "bin/**/*"
]

2. 禁用ts-node的文件缓存

ts-node默认会缓存编译后的JS文件,添加--no-cache参数可强制每次调试都重新编译:
修改launch.json的runtimeArgs:

"runtimeArgs": [
  "-r",
  "ts-node/register",
  "--no-cache"
]

如果不需要类型检查以提升调试速度,可搭配transpile-only模式:

"runtimeArgs": [
  "-r",
  "ts-node/register/transpile-only",
  "--no-cache"
]

3. 强制优先加载TS文件

在runtimeArgs中添加--prefer-ts-exts参数,让ts-node优先选择.ts文件,即使存在同名的.js文件:

{
  "program": "./index.ts",
  "cwd": "${workspaceFolder}/src",
  "runtimeArgs": [
    "-r",
    "ts-node/register",
    "--prefer-ts-exts"
  ]
}

4. 调试前自动清理旧编译文件

在package.json中添加清理脚本,调试前自动删除bin目录:

{
  "scripts": {
    "clean": "rimraf bin",
    "debug": "npm run clean && code --launch 'Launch task'"
  }
}

之后通过npm run debug启动调试,确保每次调试都基于最新源码。

内容的提问来源于stack exchange,提问作者Xerillio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:20:22