最准方案是用tokei命令行工具,它自动识别语言、剔除注释与空行、严格遵守.gitignore;安装后执行tokei即得code/comment/blank分项统计,还可集成到VSCode任务中一键运行。

Node.js 环境本身不提供项目级代码行数统计能力,硬要用 fs + readFileSync 写脚本统计,结果大概率不准、不可信,还容易卡死——这不是写法问题,是底层逻辑错了。
你真正需要的不是“用 Node 统计”,而是“在 VSCode 里快速获得可信的代码行数”,而这个目标下,Node.js 不该是主力工具,而是可能干扰判断的干扰项。
别用 Node 脚本遍历文件统计(常见错误现象)
很多人搜“VSCode Node 统计代码行数”,然后抄一段递归读文件、正则匹配非空非注释行的 JavaScript 脚本,跑完发现:
- node_modules 里的 .d.ts 全算进去了
- package-lock.json 被当成代码,贡献上万行
- // 在字符串里也被当注释(如 const url = "https://a//b")
- .vue 或 .svelte 文件里的模板块被整段计入,但实际逻辑只在 <script> 里
这不是你正则写得不够好,是 fs.readdirSync + String.split('\n') 根本不具备语法感知能力,连语言识别都做不到。
VSCode 里真正靠谱的统计方式:tokei 命令行 + tasks.json 集成
tokei 是目前唯一能在终端里开箱即用、自动识别语言、剔除注释/空行、且严格遵守 .gitignore 的工具。它用 Rust 写,快、准、不卡顿,且和 Node.js 环境完全无关——你甚至不需要装 Node 就能跑。
- macOS:
brew install tokei - Windows:
choco install tokei - Linux:
cargo install tokei(或从 GitHub releases 下二进制)
装完后,在项目根目录执行:
tokei
输出里重点关注 code 列——这才是你写的有效逻辑行。如果想集成进 VSCode,编辑 .vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "count lines",
"type": "shell",
"command": "tokei",
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"panel": "shared",
"clear": true
}
}
]
}保存后按 Ctrl+Shift+P → 输入 Tasks: Run Task → 选 count lines,结果直接出现在集成终端里。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
VSCode Counter 插件必须配对 useGitignore 才能用
如果你坚持用插件,VSCode Counter 是最轻量的选择,但它默认完全无视 .gitignore ——也就是说,刚装完右键统计,node_modules、yarn.lock、dist/bundle.js 全在里面。
必须手动改 .vscode/settings.json(不是用户设置,是工作区设置):
"VSCodeCounter.useGitignore": true
改完要重启 VSCode(热重载不生效)。验证方法:运行 VSCodeCounter: Count lines in workspace,看输出里是否还有 node_modules 下的路径。如果有,说明没识别到项目根(右下角状态栏路径不含 .git),得用 文件 → 打开文件夹 重新打开正确根目录。
另外建议补上兜底排除:
"VSCodeCounter.exclude": [ "**/node_modules/**", "**/dist/**", "**/.next/**", "**/build/**", "**/*.md", "**/package-lock.json", "**/yarn.lock" ]
为什么 cloc / CodeMetrics / Project Statistics 都不推荐
这些插件或命令行工具的问题不是功能少,而是设计假设错位:
-
cloc功能强,但 VSCode 插件版(如cloc counter)常因权限或路径解析失败,且不支持 workspace 级.gitignore自动继承 -
CodeMetrics专注复杂度,LOC 只是副产品,node_modules默认不剔除,一行yarn add react就让总数虚增 10 万+ -
Project Statistics只数换行符,不分注释/空行/<template>块,.vue文件会被拆成三类物理行,但你根本没法加总出“前端逻辑总量”
它们适合快速粗筛,不适合审计、汇报或进度追踪——而这类场景恰恰最需要准确数字。
真实项目里,.gitignore 是唯一共识性过滤依据,tokei 是目前唯一把它当第一优先级执行的工具。其他所有方案,包括任何基于 Node.js 的自写脚本,都在绕开这个事实。

















