Code Runner 默认不启用 Node.js REPL 模式,因其默认执行命令为 node $fileName,运行完即退出进程;必须通过 executorMap 配置 node -i -r utf-8 $fileName(Windows)或 node -i $fileName(macOS/Linux)显式启用交互模式、解决中文乱码并保留执行上下文。

能直接用 node -i 启动 REPL,但 VSCode 默认不进交互模式——必须手动改 code-runner.executorMap 配置,否则执行完就退出,没法接着输代码。
为什么 code-runner 默认不进 REPL?
它默认用 node $fileName 执行单个文件,跑完进程就结束。REPL 要的是“执行完不退出、保留上下文、支持后续输入”,这得靠 -i(interactive)参数触发。
-
node -i单独运行时会直接进 REPL;node -i script.js会先执行script.js,再进 REPL,变量和函数都还在 -
code-runner不传-i,也不捕获stdin,所以遇到process.stdin就卡住,根本不是代码问题 - Windows 下还可能因编码缺省导致中文乱码,得加
-r utf-8
code-runner.executorMap 怎么配才支持 Node REPL?
在 VSCode 设置里搜 code-runner.executorMap,点击“在 settings.json 中编辑”,把 javascript 对应的值改成:
"javascript": "node -i -r utf-8 $fileName"
这个配置同时解决三件事:进交互模式、防 Windows 中文乱码、保留文件执行结果上下文。
- Mac/Linux 用户可去掉
-r utf-8(系统默认 UTF-8),但-i必须保留 - 如果项目用了 ESM(
import),要额外加--experimental-specifier-resolution=node,变成:"node -i --experimental-specifier-resolution=node -r utf-8 $fileName" - 别用
$fullFileName—— 它带引号,在 Windows 下容易触发路径解析错误;$fileName更稳
启动后卡在 > 提示符不动?检查这些点
REPL 启动了,但光标停着没反应,大概率是环境或输入流被阻塞:
- 确认 VSCode 内置终端里
node -v能输出版本——否则code-runner根本调不到node - 如果脚本里写了
process.stdin.setEncoding('utf8')或readline相关逻辑,code-runner无法提供真实 stdin 流,会假死;这种脚本必须扔进终端手动跑:node -i script.js - macOS 上从 Dock 启动 VSCode 时,
node常不在 PATH 里,改完配置也无效;必须从终端执行code .重启 VSCode
真正麻烦的不是配置本身,而是 REPL 的上下文是否干净——比如你先跑了 require('./utils'),再输 foo(),结果报 ReferenceError,那八成是模块导出没处理好,或者 exports 和 module.exports 混用了。这个层面的问题,code-runner 帮不上忙,得靠你自己盯住控制台输出和模块加载逻辑。


















