配置未生效主因是workspace级设置覆盖用户级,或JSON语法错误;验证方式为运行JS脚本检查process.argv输出参数。

为什么code-runner.executorMap改了却没生效
改完 code-runner.executorMap 后仍走默认命令,大概率是配置写在了用户级 settings.json 里,而当前工作区有同名的 workspace 级配置——VSCode 优先用 workspace 级,会覆盖掉你改的全局设置。打开当前项目根目录下的 .vscode/settings.json,搜一下 "code-runner.executorMap",如果存在,直接删掉或同步修改它。
另一个常见原因是 JSON 格式错误:多了一个逗号、少了一个引号、用了中文标点。VSCode 设置面板右上角有个“{}”图标,点开能校验 JSON 语法,报错就说明配置根本没加载。
验证是否生效最简单的方法:在 JS 文件里写 console.log(process.argv),然后 Ctrl+Alt+N 运行,看输出里有没有你加的参数(比如 -r 或 --experimental-specifier-resolution)。
node 命令加哪些参数才算真正适配现代 JS 项目
单纯写 "node $fileName" 只适用于最基础的 CommonJS 脚本。真实项目往往要处理三类问题:编码、模块系统、输入流。对应参数必须组合使用:
- Windows 中文乱码:加
-r utf-8(注意不是--charset=utf-8,Node.js 不认这个) - ESM
import报错:加--experimental-specifier-resolution=node,且确保package.json里有"type": "module" - 想让
process.stdin正常读取:别用 code-runner —— 它根本不接管 stdin/stdout 流,必须切到内置终端手动运行
最终推荐的 executor 写法(Windows):"node -r utf-8 --experimental-specifier-resolution=node $fileName";macOS/Linux 可去掉 -r utf-8,但保留 ESM 参数。
调试时runtimeExecutable和program谁更重要
两者作用完全不同,不能互换:runtimeExecutable 指定用哪个 node 可执行文件(路径),program 指定运行哪个 JS 文件(路径)。漏掉 runtimeExecutable 多数时候能跑通,但用 nvm/fnm/volta 切版本时会出问题——VSCode 调试器不识别这些工具的 shell hook,可能调用旧版 node 导致断点失效或 require 行为异常。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
program 错了则直接失败,常见错误包括:
- 写成
"${file}"但当前打开的是index.ts(不是编译后的.js) - 写成
"${workspaceFolder}/src/index.js",但实际入口是dist/index.js - ESM 项目里
package.json没设"type": "module",调试器仍按 CommonJS 解析
验证方式:在 launch.json 的 configurations 里加一行 "env": {"DEBUG": "1"},启动后看控制台是否打印出 node 实际加载的路径。
用 nodemon 替代 node 时要注意什么
nodemon 是开发期工具,不是编译器替代品,但它能绕过很多 code-runner 的硬伤(比如热重载、stdin 支持)。配置时关键点只有两个:
-
runtimeExecutable必须设为"nodemon",不能写成"npx nodemon"或"./node_modules/.bin/nodemon"—— VSCode 调试器只认 PATH 里的可执行文件名 -
program字段依然指向你的 JS 入口文件(如"${workspaceFolder}/server.js"),nodemon会自动监听并重启
如果提示 command not found: nodemon,说明它没装在全局(npm install -g nodemon)或当前项目的 node_modules/.bin 没被 PATH 包含。此时更稳妥的做法是把 runtimeExecutable 改成绝对路径,比如 "${workspaceFolder}/node_modules/.bin/nodemon"(注意 Windows 下后缀是 .cmd)。
真正难搞的从来不是加几个参数,而是不同场景下参数之间的冲突:比如 -r utf-8 在 macOS 上无效,--experimental-specifier-resolution 在 Node.js 20.0 以下版本不存在,而 nodemon 默认不传递 --inspect 给子进程——这些细节不验证就写进配置,反而会让问题更隐蔽。

















