VSCode默认终端不自动进入Node.js REPL,需手动执行node -i;Code Runner插件须修改executorMap为"node -i $fileName"并处理ESM和编码问题才能支持交互式运行。

直接结论:VSCode 默认终端不进 Node.js REPL,必须手动配 node -i 才能交互式运行;用 Code Runner 插件则必须改 executorMap,否则脚本跑完就退出,根本没法接着输代码。
为什么 node app.js 不等于交互式运行?
这是最常被误解的一点:node app.js 是单次执行模式——文件跑完、进程退出、上下文清空。而 REPL(Read-Eval-Print Loop)要求:执行完不退出、保留变量/函数定义、允许后续输入表达式。
Node 自带的 node -i 才是真正进入交互式环境的开关。没加 -i,哪怕脚本里写了 console.log('hello'),输出完光标就没了,你敲 process.version 它根本不理你。
在 VSCode 终端里正确启动 Node REPL
不用插件,最稳的方式就是手动敲命令:
- 按
Ctrl + `打开集成终端 - 确认
node -v有输出(没输出请先解决 PATH 问题) - 直接运行:
node -i→ 进入纯 REPL,提示符是> - 或运行:
node -i ./script.js→ 先执行script.js,再进 REPL,里面定义的变量、函数全都能用
注意:./script.js 必须是相对路径,且当前工作目录得对;如果脚本用了 import,得加 --experimental-specifier-resolution=node 参数。
用 Code Runner 插件实现“一键进 REPL”
Code Runner 默认配置是 node $fileName,它不带 -i,也不接管 stdin,所以遇到 require() 或 console.log() 后就直接退出。要让它支持交互式,必须改 executorMap:
- 在 VSCode 设置中搜
code-runner.executorMap - 点击「在 settings.json 中编辑」,找到
javascript对应项 - Windows 用户设为:
"javascript": "node -i -r utf-8 $fileName" - macOS/Linux 用户可去掉
-r utf-8:"javascript": "node -i $fileName" - 若项目启用了 ESM(
package.json里有"type": "module"),还得加--experimental-specifier-resolution=node
别用 $fullFileName —— 它带引号,Windows 下容易触发路径解析失败;$fileName 更安全。
REPL 启动了但光标卡住不动?常见阻塞点
看到 > 提示符却无法输入,不是配置错了,而是某些操作阻断了 stdin 流:
-
process.stdin.setEncoding('utf8')或readline.createInterface()类代码,Code Runner 无法提供真实 stdin,会假死 - 脚本里调用了
inquirer.prompt()等交互库?这类必须扔进终端手动跑:node -i script.js - macOS 上从 Dock 启动 VSCode 时,
node常不在 PATH —— 改完配置也无效,必须从终端执行code .重启 - 中文乱码?Windows 下缺
-r utf-8是主因;macOS/Linux 一般不用,但终端编码本身要是 UTF-8
真正难调试的不是启动流程,而是 REPL 里的上下文是否干净:比如你 require('./utils') 后输 helper() 报 ReferenceError,那大概率是模块导出写法混用(exports.xxx vs module.exports = {}),这个得盯控制台加载日志,Code Runner 帮不上忙。


















