最可靠方式是终端执行 node script.js;需注意模块类型、工作目录和路径写法,调试用 launch.json 配置 ${file}。

直接用 Node.js 运行单个 .js 文件最可靠
VSCode 本身不“运行” JS 文件,它只是编辑器;真正执行靠的是外部运行时(比如 node)。想单独跑一个 script.js,最直截了当的方式就是终端里执行 node script.js —— 完全绕过项目启动、构建、打包这些干扰项。
常见错误现象:Cannot find module 'xxx' 或 ReferenceError: require is not defined,往往是因为误用了浏览器环境(比如点了“在浏览器中打开”),或文件里写了只在 Node 中有效的语法(如 require)却用 Live Server 打开。
- 确保当前终端工作目录是该
.js文件所在目录,或使用绝对/相对路径:node ./src/utils/test.js - 如果文件用了 ES 模块语法(
import/export),需在package.json中加"type": "module",或改用node --experimental-modules script.js(Node v12+) - 别依赖
ts-node或babel-node来临时跑纯 JS —— 它们会引入额外解析逻辑,反而掩盖真实运行环境问题
VSCode 内置终端比右键“Run Code”插件更可控
很多用户装了 Code Runner 插件,点右键“Run Code”,结果发现输出乱码、路径不对、或自动加了不该有的参数。这插件默认行为不透明,且对 import、__dirname 等处理容易出错。
使用场景:你只想看一段工具函数的输出,或验证某个算法逻辑,不需要调试器、不需要断点、也不关心 source map。
- 快捷键
Ctrl+`(反引号)呼出集成终端,手动敲node filename.js—— 命令完全由你控制 - 如果经常运行同一类文件,可以配个简单 task:
.vscode/tasks.json里加一个shell类型任务,命令设为node ${file},然后Ctrl+Shift+P → Tasks: Run Task - 避免在终端里 cd 到项目根目录再用相对路径找文件——容易因当前工作目录(
process.cwd())和文件位置不一致,导致require('./config')失败
需要调试(断点、变量监视)?用 VSCode 的 launch 配置而非插件
如果光看 console 输出不够,得一步步走逻辑、看变量值,那就必须进调试模式。这时不能靠插件“一键运行”,得配一个干净的 launch.json,明确告诉 VSCode:“就跑这个文件,用 node,别碰其他东西”。
性能影响:调试模式本身有约 10–20% 启动开销,但不会加载项目里没引用的模块,所以比启动整个服务快得多。
- 在项目根下建
.vscode/launch.json,内容精简到只剩一个配置:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Run current JS file",
"skipFiles": ["<node_internals>/**"],
"program": "${file}",
"console": "integratedTerminal"
}
]
}
<p>这样按 <code>F5</code> 就只跑当前打开的 <code>.js</code> 文件,<code>${file}</code> 是 VSCode 变量,自动取当前编辑器路径。</p>
<p>容易踩的坑:<code>"program": "${workspaceFolder}/index.js"</code> 这种写死路径的配置,换文件就得改配置;还有人加 <code>"env": {"NODE_ENV": "development"}</code>,结果让被测文件误判环境 —— 单测时尽量保持环境干净。</p>
<h3>注意 CommonJS 和 ES Module 的 <code>__dirname</code> 和 <code>import.meta.url</code>
</h3>
<p>这是最容易被忽略、也最常引发路径错误的地方。你在文件里写 <code>fs.readFileSync('./data.json')</code>,看似简单,但运行结果取决于模块类型和 <code>node</code> 版本。</p>
<p>使用场景:读取同目录下的 JSON、CSV、或模板文件。</p>
<ul>
<li>CommonJS(<code>require</code>)中,<code>__dirname</code> 可用,指向当前文件所在目录</li>
<li>ES Module(<code>import</code>)中,<code>__dirname</code> 不可用,得用 <code>path.dirname(import.meta.url)</code>,而且要配合 <code>fileURLToPath</code> 转换</li>
<li>如果你的单测文件是 <code>test.mjs</code>,又用了 <code>__dirname</code>,<code>node test.mjs</code> 会直接报错 —— 不是 VSCode 的问题,是 Node 的模块规则</li>
</ul>
<p>复杂点在于:同一个项目里可能混用两种模块系统,而 <code>node</code> 对 <code>.js</code> 文件的模块判定,既看 <code>package.json#type</code>,也看是否含 <code>import</code> 关键字。真要省心,统一后缀(<code>.cjs</code> / <code>.mjs</code>)或统一用 <code>import.meta.url</code> 方案。</p></node_internals>


















