能直接在VSCode终端执行node dist/index.js并看到输出才算真正可运行;90%的“找不到文件”或“SyntaxError”源于路径错配、dist未生成或type:"module"与CommonJS混用。

能直接在 VSCode 终端执行 node dist/index.js 并看到输出,才算编译后程序真正可运行;90% 的“找不到文件”或“SyntaxError”其实源于路径错配、dist 目录未生成,或 type: "module" 与 CommonJS 混用。
确认 dist 目录存在且含可执行 JS 文件
VSCode 不生成代码,它只执行你提供的文件。所谓“编译后”,是指 TypeScript 或 Babel 输出的 JS 文件已落地到磁盘,比如 dist/index.js。
- 先在系统终端(不是 VSCode 内置终端)执行
tsc --build或npm run build,确保dist/下有生成物 - 检查
dist/index.js是否是合法 JS:用node -c dist/index.js验证语法(无输出即通过) - 如果项目用了 ESM(
"type": "module"),dist/index.js必须是 ES 模块格式,不能混用require();否则会报Cannot use import statement outside a module - Windows 用户注意:若
dist路径含中文或空格,node dist/我的入口.js会失败,改用双引号包裹:node "dist/我的入口.js"
node 命令能否访问到 dist 下的文件
VSCode 终端只是 shell 的封装,它不自动切换工作目录,也不理解你的项目结构。你必须明确告诉它从哪执行。
- 打开终端前,先确认当前路径是项目根目录(
pwd或cd到项目文件夹) - 执行
ls dist/(macOS/Linux)或dir dist\(Windows)确认文件可见 - 不要写
node ./dist/index.js就以为安全——如果index.js里用了__dirname或相对路径读取配置,实际运行时的__dirname是dist目录,不是源码目录,容易报ENOENT - 常见坑:
dist/index.js依赖dist/config.json,但构建脚本没把 JSON 复制过去,导致运行时报错而非编译时报错
调试器 launch.json 中 program 必须指向真实 JS 文件
按 F5 启动调试时,VSCode 不会帮你找文件,也不会自动 fallback 到 src/。路径写错,断点就永远不生效。
- 生成的
launch.json默认是"program": "${file}",这适合单文件调试,不适合编译后项目 - 正确做法是显式写死路径:
"program": "${workspaceFolder}/dist/index.js" - 如果用了多版本 Node(如 nvm),加
"runtimeExecutable": "/usr/local/bin/node"显式指定,避免调试器调用错版本导致import行为异常 - 别在
dist/里放.ts或.mjs文件并指望调试器自动识别——program只接受普通 JS(.js),且必须是 node 可直接执行的格式
中文乱码、process.stdin 卡死、ESM 报错的快速绕过法
这些不是编译问题,而是 node 执行时的运行时限制。code-runner 插件尤其容易在这三类场景失效。
- Windows 下
dist/index.js输出中文乱码:在终端执行前先运行chcp 65001,或改用node -r utf-8 dist/index.js - 脚本含
readline或等待用户输入:code-runner 不支持 stdin 交互,必须在内置终端手动执行node dist/index.js - ESM 报
Cannot use import statement:确认package.json有"type": "module",且dist/index.js中所有import路径都带扩展名(import x from './util.js'),否则 Node.js 无法解析
最易被忽略的是:dist/ 目录本身不是魔法容器——它只是个文件夹。VSCode 不会替你校验里面的内容是否完整、路径是否可访问、模块系统是否统一。哪怕 tsc 成功了,只要 dist/index.js 里 require 了一个没复制过去的 .json,运行时照样崩。


















