在项目开发中统计代码行数的6种方式

article/2025/10/25 18:56:07

文章目录

    • 一、使用find和wc命令统计代码行数
      • 进行参数的过滤筛选
      • 命令参数简要说明
    • 二、PowerShell工具统计代码行数
      • 条件过滤
      • 输出所有文件的行数
      • PowerShell相关命令的简要说明
    • 三、git命令
      • git ls-files
      • git log
    • 四、代码编辑器插件
    • 五、jscpd
    • 六、自己实现一个
      • 注释和空行
      • 忽略目录和文件
    • 总结

上一篇文章介绍了,如何使用工具检测项目中的代码重复度,可见博文 使用jscpd统计代码重复度。
本文将探索下,如何在前端项目统计代码的行数,目前博主所知的较方便的方式大概有6种,每种方式都对应的是不同的使用场景,下面将一一为大家介绍。

一、使用find和wc命令统计代码行数

直接在项目文件目录下使用命令行进行统计,是比较方便的,能统计所有的代码总行数、以及每个文件的行数、进行条件过滤统计等等,比如 findwc
findwc 两个命令是 LinuxUnix 系统中的常用命令,而在Windows系统下,如果安装了 Git,可以调出 Git Bash 工具,使用 findwc 命令统计代码行数。

Git Bash 可以在Windows系统中提供类似于 Unix shell 的命令行环境,包含了 GitUnix 工具常用的命令,方便管理、提高效率。

当前一般前端项目,核心业务代码基本都在 src 目录下,我们进入该目录,直接执行以下命令:

find . -type f -print | xargs wc -l

该命令,可以直接读取到所有的文件,并显示每个文件的代码行数,以及所有文件的总行数,如下图所示。

在这里插入图片描述
这是简单的文件读取,还可以通过各种条件过滤。

进行参数的过滤筛选

如进行文件格式过滤,以下命令只读取 .js.ts 格式的文件:

find . "(" -name "*.js" -or -name "*.ts" ")" -print | xargs wc -l

过滤代码文件中的空行,使用 grep -v "^$"

find . "(" -name "*.js" -or -name "*.ts" ")" -print | xargs | grep -v "^$" | wc -l

进行目录过滤,比如不统计 node_modules 目录:

find . -name "*.js" | grep -v "node_modules"  | xargs wc -l

命令参数简要说明

find:在给定路下寻找匹配的文件,-name表示文件名,-type文件类型
wc:统计文件中的文件行数、字数和字符数,-l统计文件的行数
grep:逐行搜索,找出匹配的内容,-v表示不匹配

在Windows下,还可以使用 PowerShell 命令行工具来统计项目的代码行数。

二、PowerShell工具统计代码行数

在项目的 src 目录下,我们只需要在该目录下运行 PowerShell 工具,打开命令行窗口,输入以下命令:

(Get-ChildItem -Recurse -File | Get-Content | Measure-Object).Count
## 63240

通过该命令,可以输出 src 目录下所有文件的行数总和,如果要过滤空行,可以使用 -Line 参数选项:

(Get-ChildItem -Recurse -File | Get-Content | Measure-Object -Line).Lines
## 58691

这里输出的就是不包含空行的代码行数。

条件过滤

如果要过滤文件格式,可以使用通配符:

(Get-ChildItem -Recurse "*.ts","*.js" | Get-Content | Measure-Object).Count

上面的格式过滤方式,无法使用路径,所以也可以使用 Where-Object 命令来过滤文件格式,可以限定路径为 .\src,如下所示:

(Get-ChildItem .\src -Recurse | Where-Object {$_.Name -like "*.ts" -or $_.Name -like "*.js"} | Get-Content | Measure-Object).Count

输出所有文件的行数

如果要输出每个文件的行数:

Get-ChildItem -Recurse -File | ForEach-Object {Write-Output $_.FullName $(Get-Content $_.FullName | Measure-Object).Count}

在这里插入图片描述

PowerShell相关命令的简要说明

Get-ChildItem:获取指定目录中的文件和子目录的列表。在 PowerShell 中还可以使用 dir 命令,效果差不多。
-Recurse:命令参数,用于在搜索目录时递归子目录。
Get-Content:读取文本文件的内容,包含文件行数、字符、字节等数据。
Measure-Object:用于对一组对象进行测量和计算,如进行求和。
Where-Object:根据指定条件筛选过滤对象集合的数据。
ForEach-Object:迭代命令,对于输入的对象组中的每个对象进行指定操作,可用于遍历文件。
Write-Output:将指定的字符串或值输出到 PowerShell 控制台。

三、git命令

除了以上两种命令行统计方案以外,还可以使用git命令来统计代码行数,命令也很简单,主要使用到以下两个命令:

  • git ls-files:列出项目中所有的文件,可用于查看项目中文件的代码行数和总代码行数。
  • git log:获取所有提交的历史记录,通过记录,统计分支下的修改代码的行数。

git ls-files

如下,统计项目中所有文件的总代码行数:

git ls-files | xargs cat | wc -l
## 58927

但需要注意的是:如果使用git统计,需要代码已经提交入库到git仓库,否则,统计命令会报错:

git ls-files | xargs cat | wc -l
## fatal: not a git repository (or any of the parent directories): .git

统计每个文件的代码行数,命令如下:

git ls-files | xargs wc -l

在这里插入图片描述
显示文件的行数以及总代码行数。

从上面命令可看出,使用 git ls-files 和前文提到的 find 较相似,也可以对它的结果进行过滤。

git ls-files '*.tsx' '*.js' | grep -v 'src/assets' | xargs wc -l

以上命令,统计文件格式为 .tsx.js 的文件,并且会过滤掉 src/assets 目录下的文件,可以通过这种方式进行自定义的筛选。

git log

也可以使用git log命令,统计对应分支下的修改代码的行数。

git log --no-merges --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

这里统计了当前分支下的代码行数,包含增加的行数、删除的行数、以及代码总行数,如下图所示:

在这里插入图片描述
也可以增加一些参数,通过这些参数进行条件过滤:

–no-merges:是去除该提交中merges的代码,因为开发人员有可能会merge其他分支的代码,此时应该去除
–since= --until=:是要统计修改记录的开始和结束时间,当统计某个迭代,就是迭代开始时间和结束时间
–author:是指修改代码的人 过滤多人时使用 | 分开
–pretty=:控制显示的记录格式
–numstat:对增加和删除的行数进行统计 第一列显示的是增加的行数 第二列显示的是删除的行数

git log master --no-merges --since=2023-03-01 --until=2023-3-26 --author="zuozhe" --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'
## added lines: 28750 removed lines : 7767 total lines: 20983

如上命令所示,统计了 master 分支下,时间从 2023-03-012023-3-26之间,提交人为 zuozhe 的所有修改过的代码行数。

四、代码编辑器插件

现在的代码编辑器也有提供一些插件,用于统计代码行数,比如博主使用的 VS Code,就很方便。
这里介绍 VS Code Counter 插件,它能统计项目代码行数、注释行数、以及空行,并且还会展示每个文件的行数以及分不同格式的文件显示。

首先,在插件中心安装该插件,然后使用快捷键 ctrl + shift + p,在输入框选择 VSCodeCounter: Count lines in directory,接着会出现项目目录输入框,默认是当前工作目录,可以更改。

在这里插入图片描述
在这里插入图片描述
确定好项目路径以后,回车就会显示已选路径下的项目文件代码的统计行数,以 .md 文件的形式展示出来,如下图:

在这里插入图片描述
该插件会在当前目录下,生成一个名为 .VSCodeCounter 的目录,里面放置生成的各种代码统计数据,可以自行查询。

五、jscpd

前文提到上一篇博文有介绍如何统计代码重复度,使用了 jscpd 工具库,它当然也有统计项目代码行数的能力。
如下图所示,会显示整个项目总的代码行数,Total 行,更多的使用可查看上篇博文。

在这里插入图片描述

六、自己实现一个

除了使用以上5种方式以外,我们也可以自己动手,实现一个读取项目代码行数的工具。
而要想实现一个简单的代码行数的统计工具,只需要以下三个步骤:

  1. 迭代遍历项目目录下的所有文件
  2. 读取文件的内容,行数使用换行符 \n 进行判断即可
  3. 计算所有的代码行数

对于前端同学,使用 nodejs 可以很好的完成这个事情,如迭代文件,代码如下:

// 可以通过执行命令传入目录参数
const params = process.argv.splice(2)
const root = params[0]// 遍历读取文件
let stat = fs.statSync(root)
if (stat.isDirectory()) {let files = fs.readdirSync(root)for (let file of files) {file = `${root}/${file}`const dirStat = fs.statSync(file)if (dirStat.isDirectory()) {queryAllFiles(file)} else {// 读取文件行数}}
} else {// 读取文件行数
}

下面是,读取文件内容和行数:

// 读取文件内容,通过 `\n` 换行符分割内容后,统计长度,即行数
let fileContent = fs.readFileSync(path)  
fileContent = fileContent.toString()
const fileLines = fileContent.split('\n')
const lines = fileLines.length
console.log(path + ' ' + lines)

读取了每一个文件的行数,我们只需要对它们进行累加就可以统计出总的代码行数。

注释和空行

还可以统计代码注释,这里以前端的JS代码为示例,使用正则表达式,判断一行代码是否注释:

const reg = new RegExp('^(//|/\\*|\\*|\\*/)', 'g')
const commentLines = fileLines.filter(line => reg.test(line.trimStart())).length

注意,这里注释的判断,使用的JS代码相关的注释方式:///***/,TS代码也一样适用。
如果是使用其他注释方式的代码,需要定义对应的过滤。

空行的判断,也很简单,只需要判断一行没有内容即可:

const blankLines = fileLines.filter(line => line.trim() === '').length

忽略目录和文件

如果还要加条件进行过滤筛选,也比较方便,只需要在循环迭代送文件时进行过滤。
比如我们需要忽略掉 'node_modules''dist'等目录:

// 定义过滤的目录,也可以使用配置文件、命令参数等方式
const ignores = ['node_modules', 'dist']// 文件迭代时,忽略相应目录
for (let file of files) {const isNotIgnore = ignores.indexOf(file) > -1if (isNotIgnore) {continue}// ...
}

筛选文件和目录的方式较类似,使用不同的比较方式而已。

文件格式的过滤:

// 只统计 js 和 ts 的代码文件
const formats = ['.js', '.ts']
if (stat.isFile()) {let ext = path.extname(file)if (formats.indexOf(ext) !== -1) {// 读取文件内容和行数// ...}
}

看看简单的执行结果,如下图所示:

在这里插入图片描述

总结

六种不同的方式,都能方便的统计代码行数,但也各有特点。
find 命令行适用不同系统,而 PowerShell 在Windows系统下可用;jscpd 统计代码行数和重复度。
安装了 Git 工具的,可以使用 git log 统计代码的修改行数、不同人员和时间段的各种提交修改等。
代码编辑器,有各种插件工具,除了统计代码行数,还能区分文件格式、注释行数、空行,也比较直观方便。
自己实现一个统计工具,能够实现更多的功能,并进行定制化处理,或者集成到构建工具中等等,满足更多需求。


http://chatgpt.dhexx.cn/article/qrx8ixmw.shtml

相关文章

chatgpt赋能python:Python代码行数统计-统计Python代码行数的常用工具与使用方法

Python代码行数统计 - 统计Python代码行数的常用工具与使用方法 Python编程语言是当今最流行的编程语言之一,在数据科学、人工智能、Web应用程序等许多领域都得到了广泛应用。当我们开发Python项目时,我们经常需要统计代码行数以管理代码库并监视进度。…

局域网电脑使用同一台鼠标键盘控制

问题又来了,我现在有两个电脑,局域网相连,但是我只有一套键盘鼠标啊,办公特别不方便,现在有工具可以让我们达到这个目的。 微软推出的 Mouse without Borders (无界鼠标),这是一个免费的工具大家可以放心。下载地址为…

用一套键鼠控制两台主机

自己最近做一个项目涉及到以下场景:需要在一台window10系统的电脑上看一些文档,同时在一台装Ubuntu1804的电脑上跑一些代码。因此需要同时用两套鼠标键盘,切换起来十分麻烦,而且经常会拿错。因此参考博客解决了用一套键鼠控制两台…

Synergy两台电脑使用同一个鼠标和键盘

###分享一款共享鼠标和键盘的软件,即两台电脑使用同一个鼠标和键盘! Synergy是一款跨平台的键盘鼠标共享软件,日前我们提供了Synergy 和Synergy 64位的Win版本、Synergy Mac版,Synergy 能够让使用者仅用一套键盘鼠标,就…

如何把笔记本做台式机的副屏(一套键鼠控制两台电脑)

通过一套键鼠控制两台电脑 前提安装所需的软件一、 简介二、 安装2.1 小技巧 前提 两台电脑在同一个局域网内,并且均为windows操作系统 例如两台电脑链接的同一个WIFI,或者笔记本无线连接路由,台式机插网线链接路由 只有在同一个局域网内才能…

用一个键盘和鼠标控制两台双显示器计算机的最佳方法是什么?

If you have two awesome dual-monitor computers and want to easily switch back and forth between them using a single keyboard and mouse, then what is the best way to go about it? Today’s SuperUser Q&A post provides some great suggestions for a reader’…

怎么用一个计算机控制两个屏幕,一台电脑带2个显示器,这样操作就对了,双屏显示操作更方便...

为了提高操作电脑的工作效率,许多用户决定将两台显示器连接到台式电脑或笔记本电脑,在两个显示器上工作,可以扩展桌面空间,在需要的时候还可以将图像从其中一个屏幕复制到另一个屏幕上。你可以将两台显示器连接到几乎任何台式计算机或笔记本电脑,在Windows 7和Windows 10操…

python两台电脑文件传输_两台电脑怎么互相连接传送文件?

相信许多购买了新电脑的朋友最头疼的事儿就是如何把旧电脑里的资料拷贝到新电脑里。因为,文件太大用移动硬盘实在麻烦,网络社交工具在线传送速度太慢,网线对拷既要求交叉线又搞不懂IP设置,难!难!难! 那么,有没有一种简单又粗暴的方式可以实现电脑数据对拷呢? 绿联USB …

图文教程使用一套键鼠控制两台电脑

现在天气太热了,我一直呆在实验室,实验室原本有一台电脑,配置不太好,但是毕竟是台式机,硬盘快的一笔,CPU也是I5的,所以我想利用一下那台机器,和我的笔记本优势互补。 第一步:首先你要有起码2台电脑。 都装上windows系统,不同版本没有关系,我是win7和win8 第二步:连…

【两台电脑之间实现鼠标键盘共享】

文章目录 前言一、实现前提二、步骤1.下载与安装软件2.两台电脑的配对(姑且这么叫) 前言 提示:这里可以添加本文要记录的大概内容: 在工作的过程中有遇到需要使用两台电脑,但是两台电脑有这个各自的鼠标键盘&#xf…

计算机安装两个键盘会怎样,外设门诊:一个键盘能否连接两个接收器?

1一个键盘能否连接两个接收器 [中关村在线键鼠频道原创] 用户及玩家在日常使用键鼠外设产品时,经常会出现这样或那样的问题。小到驱动下载安装,大到更换线材、MOD改造等等,如果您想得到及时丰富的解答,请到电竞游戏装备区论坛》发帖,说出您心底的疑惑,中关村在线编辑及网…

2台电脑共享一套键盘鼠标

###分享一款共享鼠标和键盘的软件,即两台电脑使用同一个鼠标和键盘!Synergy是一款跨平台的键盘鼠标共享软件,日前我们提供了Synergy 和Synergy 64位的Win版本、Synergy Mac版,Synergy 能够让使用者仅用一套键盘鼠标,就…

计算机主机如何控制所有的电脑,教你如何让一个鼠标和控制两台电脑

1简介 synergy是个开源的软件,有三个版本 mac / linux / windows,要想实现共享鼠标键盘,必须在所有机器上都安装这个软件,并进行相应的配置,有一台唯一的主机作为服务器端,其他主机作为客户端,要…

两台计算机共享鼠标,总算发现什么是双模键盘(两台电脑共用一套鼠标键盘)

这次的键盘评测比较特殊,是在家里玩成的,键盘性价比颇高,从购买到使用也就一周多的时间,因为最近评测写得比较多,主要是打字用,所以我就选择的青轴,当然这个价格只能买国产轴了。(至于售价我会在…

【高效办公】一个鼠标键盘控制两台电脑-synergy

1.发现Synergy 今天我在苏宁易购买的机械师创物者笔记本电脑到啦,这是为了替换我大学4年用的thinkpad,所以这下我就有了两台笔记本电脑。这旧电脑虽然卡,但它仍然有使用的价值,比如申请专利得用2003版的office,比如运…

synergy一套键鼠控制两台电脑

1. 目的 使用一套键鼠来控制两台主机,win10和ubuntu18。 Synergy是一个键盘和鼠标共享工具,可以跨终端进行使用。 该方案的实现必须使两台设备在同一局域网下,两种设备安装的Synergy版本最好一致,版本不一致为测试,可…

鼠标键盘控制多台计算机,一个软件即可一套键盘鼠标控制多台电脑

有时会遇到同一桌面上两台电脑连接两副键盘、鼠标的情况。两套键鼠不仅占空间,让我的零食无处安放,还迫使我经常手动切换鼠标或者键盘来控制另一台电脑,麻烦得蛋疼。 天下苦两套键鼠久矣,还好功夫不负有蛋人,终于让我发…

计算机中键盘可以共享吗,两个电脑怎么共用一个键盘

两个电脑怎么共用一个键盘 有些办公人员需要用两台电脑来工作,但是只想要一套鼠标键盘控制,那么两个电脑怎么共用一个键盘呢?下面就让jy135来告诉大家吧,欢迎阅读。 1、首先要知道两台电脑的ip地址。ip地址可以通过电脑开始菜单中的运行框&a…

Synergy实现一套鼠标和键盘控制两台电脑

一、准备工作 1、下载Synergy,下载链接https://down10.zol.com.cn/yuanchenggongju/synergy_1.8.7.zip 2、解压安装--自己选择路径 3、注意:两台电脑都必须安装 二、进行设置 此软件分为服务器和客户端 服务器指你用的鼠标和键盘那个电脑。即用服务…

如何用一台计算机控制多台计算机,怎么用一套鼠标键盘操作两台或多台电脑?...

无需外部硬件设备,用软件的方法就可以实现一套鼠标键盘控制两台或多台电脑。(前提是两台电脑在同一个局域网中)。下面以两台电脑为例。 1、首先要知道两台电脑的ip地址。ip地址可以通过电脑开始菜单中的运行框,输入cmd 在弹出的对话框中输入 ipconfig来…