位置: IT常识 - 正文

在项目开发中统计代码行数的6种方式(在项目进行过程中,一个开发人员)

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

推荐整理分享在项目开发中统计代码行数的6种方式(在项目进行过程中,一个开发人员),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:在项目进行过程中,一个开发人员,在项目开始时,项目发起人宣布可用资金比原计划少,项目的开发方式包括,在项目进行过程中,一个开发人员,在一个项目的开发过程中采用了新的技术,在项目进行过程中,一个开发人员,在一个项目的开发过程中采用了新的技术,在项目进行过程中,一个开发人员,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

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

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

当前一般前端项目,核心业务代码基本都在 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在项目开发中统计代码行数的6种方式(在项目进行过程中,一个开发人员)

显示文件的行数以及总代码行数。

从上面命令可看出,使用 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-01 到 2023-3-26之间,提交人为 zuozhe 的所有修改过的代码行数。

四、代码编辑器插件

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

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

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

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

五、jscpd

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

六、自己实现一个

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

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

对于前端同学,使用 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.lengthconsole.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) > -1 if (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 统计代码的修改行数、不同人员和时间段的各种提交修改等。 代码编辑器,有各种插件工具,除了统计代码行数,还能区分文件格式、注释行数、空行,也比较直观方便。 自己实现一个统计工具,能够实现更多的功能,并进行定制化处理,或者集成到构建工具中等等,满足更多需求。

本文链接地址:https://www.jiuchutong.com/zhishi/299137.html 转载请保留说明!

上一篇:年度征文 | 回顾2022,展望2023(我难忘的2022,我憧憬的2023)(回顾2021年作文)

下一篇:API接口开发其实特简单,Python Flask Web 框架教程来了(api接口应用举例)

  • 微博怎么看一个人的点赞记录(微博怎么看一个人的评论)

    微博怎么看一个人的点赞记录(微博怎么看一个人的评论)

  • 支付宝小鸡饲料容量最大多少(支付宝小鸡饲料今天答题)

    支付宝小鸡饲料容量最大多少(支付宝小鸡饲料今天答题)

  • 苹果屏幕页数怎么删除(苹果屏幕页数怎么设置)

    苹果屏幕页数怎么删除(苹果屏幕页数怎么设置)

  • 售后电池与新电池区别(售后电池是新的吗)

    售后电池与新电池区别(售后电池是新的吗)

  • 屏幕老化有什么影响(屏幕老化有什么弊端)

    屏幕老化有什么影响(屏幕老化有什么弊端)

  • wps分隔符号在哪里(wps中的分隔符在哪)

    wps分隔符号在哪里(wps中的分隔符在哪)

  • 半角空格是什么(半角空格是什么字母)

    半角空格是什么(半角空格是什么字母)

  • 淘宝有保价服务吗(淘宝有保价服务怎么退差价)

    淘宝有保价服务吗(淘宝有保价服务怎么退差价)

  • iphone18w快充对电池影响大吗(苹果18w快充实际功率)

    iphone18w快充对电池影响大吗(苹果18w快充实际功率)

  • 企业微信能分享屏幕给别人吗(企业微信能分享名片吗)

    企业微信能分享屏幕给别人吗(企业微信能分享名片吗)

  • 应用权限在哪里打开(苹果手机的应用权限在哪里)

    应用权限在哪里打开(苹果手机的应用权限在哪里)

  • 注销了的快手号能恢复吗(注销了的快手号还能找回吗)

    注销了的快手号能恢复吗(注销了的快手号还能找回吗)

  • 433mbps是多少兆(433mbps是多少兆的网速)

    433mbps是多少兆(433mbps是多少兆的网速)

  • 微信翻译怎么收起来(微信翻译怎么收不到信息)

    微信翻译怎么收起来(微信翻译怎么收不到信息)

  • 虾米音乐怎么播放mv(虾米音乐怎么播放本地歌曲)

    虾米音乐怎么播放mv(虾米音乐怎么播放本地歌曲)

  • 朋友圈个签怎么居中(朋友圈个签怎么设置到中间)

    朋友圈个签怎么居中(朋友圈个签怎么设置到中间)

  • 三星开机图标闪烁开不了机怎么办(三星开机图标闪烁)

    三星开机图标闪烁开不了机怎么办(三星开机图标闪烁)

  • macbook需要贴膜吗(macbook要贴保护膜吗)

    macbook需要贴膜吗(macbook要贴保护膜吗)

  • 投影仪怎么调(投影仪怎么调整倾斜角度)

    投影仪怎么调(投影仪怎么调整倾斜角度)

  • 小米电视怎么投屏安卓(小米电视怎么投屏图片)

    小米电视怎么投屏安卓(小米电视怎么投屏图片)

  • 怎样往qq邮箱发文件(怎样往qq邮箱发信息)

    怎样往qq邮箱发文件(怎样往qq邮箱发信息)

  • Mac Dock栏不见了怎么办?Dock栏消失解决办法(macos dock栏)

    Mac Dock栏不见了怎么办?Dock栏消失解决办法(macos dock栏)

  • Linux主流架构运维工作简单剖析讲解(linux架构师是做什么的)

    Linux主流架构运维工作简单剖析讲解(linux架构师是做什么的)

  • 微信小程序解决view点击事件穿透地图map触发markertap(微信小程序解决跨域问题)

    微信小程序解决view点击事件穿透地图map触发markertap(微信小程序解决跨域问题)

  • Vue笔记(五)vuex(vue笔记项目)

    Vue笔记(五)vuex(vue笔记项目)

  • [ZCU102嵌入式开发]基于Vitis-AI的yolov5目标检测模型在ZCU102开发板上的部署过程分享(嵌入式开关安装效果图)

    [ZCU102嵌入式开发]基于Vitis-AI的yolov5目标检测模型在ZCU102开发板上的部署过程分享(嵌入式开关安装效果图)

  • centos 中文乱码_Studing&Thinking_百度空间(centos乱码,怎么修改成英文)

    centos 中文乱码_Studing&Thinking_百度空间(centos乱码,怎么修改成英文)

  • 出差误餐补助是谁承担
  • 三项经费包括在哪些内容
  • 纳税人性质怎么改
  • 购买不良资产交印花税吗
  • 增值税普通发票和普通发票的区别怎么交税
  • 小规模没有进项可以开发票吗
  • 固定资产附加的账务处理
  • 公司从基本户转钱到一般户走流程?
  • 房产税细节
  • 网上报税费用如何抵扣账务怎么处理?
  • 期货交易所手续费2023
  • 借款合同印花税减免优惠政策
  • 营业执照首次年报
  • 软件企业增值税退税的账务处理
  • 最新科研增值税税率为多少?
  • 如何倒算税前工资的公式
  • 税控盘管理费会计分录
  • 企业所得税季报人数怎么填
  • 长时间不操作电动座椅会发生什么
  • iphone6s怎么开启开发者选项
  • 华为手机哪一款好用性价比高
  • 在建工程会计账务处理是否有利润表
  • wp网站迁移
  • 存货的毁损通过什么科目核算
  • 隐藏资源管理器窗口
  • 调制解调器的作用包括
  • 增值税专用发票查询系统官方网站
  • 自有物业出租需交税吗
  • 如何用php制作网页
  • vue页面嵌套iframe vue页面
  • php递归算法经典题目
  • php入门实例
  • 盈余公积弥补以前亏损分录
  • 餐厅的打包盒一般是多少毫升
  • 查补税款
  • 永久性差异会计不确认收入
  • 小规模免征增值税2023
  • 延期缴纳税款的问题
  • c语言fread函数的用法示例
  • js变量作用范围
  • 购买方销项负数发票怎么抵扣
  • 公司股东向银行货款,与私人财产有没有关系
  • 综合所得年度自行申报怎么操作
  • 销售包括是销项税金吗
  • 固定资产后续支出一律计入固定资产成本
  • 公司对于子公司的股权投资
  • 购买软件使用费计入什么科目
  • 跨月冲红的发票怎么做会计分录
  • 简易办法征收增值税有几种情况
  • 财政补助结转余额在借方还是贷方
  • 天猫佣金会返还吗
  • 金税盘技术维护费可以抵扣吗
  • 企业建账的法律规定
  • sql server中一个数据库可以有多个文件组
  • mysql高级功能
  • sql实现选择操作
  • 分页存储过程的实现
  • 解决口苦最快的方法
  • 联想e430安装win10
  • 如何设置访问共享文件夹
  • mac系统怎么共享文件夹
  • win10系统怎么卸载ie浏览器
  • linux就要这样学
  • 'GL_COMBINE_ARB' : undeclared 'GL_RGB_SCALE_ARB' : undeclared 问题
  • js基于什么语言
  • ztree getnodebytid
  • css隐藏显示元素的方法
  • android 动效
  • unity3d物体旋转
  • js限制字符长度
  • js的调试
  • 使用jQuery Ajax 请求webservice来实现更简练的Ajax
  • android手机屏幕采集触摸区域所有点
  • javascript电商项目
  • 贵阳税务局领导
  • 怎么算税额和单位税额
  • 税务总局转变税收征管方式
  • 发票开票系统可以查询上一年发票吗?
  • 潍坊特殊工种退休公示名单九月
  • 房地产的土地增值税怎么交
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设