推荐使用 project statistics 插件,需右键项目根目录运行统计命令,手动配置排除自定义目录(如 out、.next),并注意其仅统计物理行数且不区分注释与空行。

如何用 VSCode 插件准确统计整个项目的代码行数
VSCode 自身不提供项目级行数统计,必须依赖插件;但多数插件默认只统计打开的文件或忽略 node_modules、.git 等目录——若没手动配置,结果会严重偏高(比如把依赖包也算进去)。推荐使用 Project Statistics 或 Code Metrics,前者轻量且支持自定义排除路径,后者更侧重函数/类粒度但配置稍复杂。
安装后需右键项目根目录 → 选择 Project Statistics: Show Project Stats(不是点击侧边栏图标),否则只统计当前工作区已加载的文件。首次运行会扫描全部文件,耗时取决于项目大小,中途关闭面板不影响后台计算。
-
Project Statistics默认排除node_modules、.git、dist、build,但如果你有自定义输出目录(如out或.next),需在设置中补充:"projectStatistics.excludedFolders": ["out", ".next"] - 它按文件后缀分类统计,
.ts和.tsx是分开计的,如果想合并看 TypeScript 总量,得自己加总 - 注意:它不区分空行、注释行和有效代码行,纯物理行数(LOC),不是 SLOC(可维护性评估慎用)
为什么 Lines 插件统计结果比实际多出几万行
常见原因是插件未识别二进制文件或锁文件,把 yarn.lock、package-lock.json、甚至图片资源(如 .png 被误配为文本)全当代码读取。这类文件单个就可能上万行,且内容无结构,导致统计失真。
解决方法是显式声明文本文件类型,在 VSCode 设置中添加:
"files.associations": {
"*.lock": "ignore",
"*.png": "ignore",
"*.jpg": "ignore"
}
或者更稳妥的做法:用 Project Statistics 的 includeFiles 白名单机制,只允许 **/*.js、**/*.ts、**/*.jsx 等明确源码后缀。
- 不要依赖插件“自动识别文本文件”——VSCode 的 MIME 类型判断在某些场景下不可靠
-
Lines插件本身不支持白名单,只能靠files.associations全局屏蔽,灵活性差 - 如果项目含大量 JSON 配置(如
webpack.config.js是 JS,但tsconfig.json不算源码),建议单独归类而非一并计入“代码量”
统计结果里 “Comments” 数值异常高,是不是注释写太多了
不一定。很多插件(如 Code Metrics)会把 JSDoc 块注释、TypeScript 接口文档、甚至 Markdown 文件里的代码块都算作注释行。尤其当你项目里有 README.md 或内嵌文档(如 docs/ 目录),它们会被当作“带注释的文本文件”计入。
验证方式:临时禁用对非源码后缀的支持。例如在 Code Metrics 设置中关闭 "codeMetrics.includeMarkdown": false,再重跑统计。
- 真正影响可维护性的不是注释行数,而是注释与代码的比例是否合理(比如某文件 200 行代码配 300 行 JSDoc,大概率是文档过载)
-
Project Statistics不单独统计注释,只给总行数和空白行数,反而更干净 - 如果必须分析注释密度,建议导出为 CSV 后用脚本过滤掉
.md、.txt等非源码文件再计算
终端命令补位:当插件卡死或需要自动化时怎么办
插件在超大项目(如 >5000 个文件)中容易无响应,此时直接用系统命令更可靠。Windows 用户可用 PowerShell,macOS/Linux 用 find + wc 组合,关键是排除逻辑要和插件一致,否则无法对标。
例如统计所有 .ts 和 .tsx 的物理行数(排除 node_modules 和 dist):
find . -name "*.ts" -not -path "./node_modules/*" -not -path "./dist/*" | xargs wc -l
注意:find 在 macOS 上不支持 -not -path 的简写,得写成 ! -path;PowerShell 则要用 Get-ChildItem -Recurse -Include *.ts | Where-Object { $_.FullName -notmatch "node_modules|dist" } | Get-Content | Measure-Object -Line。
- 别信网上抄来的“一键统计所有文件”命令——它们往往没排除
.git或logs/,结果虚高 - 如果项目用 pnpm,还要额外排除
.pnpm目录(硬链接结构会让find重复计数) - 字符数统计(
wc -m)意义不大,不同编码(UTF-8 vs UTF-16)、换行符(CRLF vs LF)会导致偏差,一般只看行数











