项目代码统计
今天接到一个需求,需要统计整个项目的代码量,为了系统且清晰的统计到整体的代码量,我还是做了些工作的。
于是这篇文章便诞生了。
Tasking
要做代码量统计,大致需要以下工作
贴出代码
具体如何操作,看这里
clone repository
1
ghorg clone groupname --concurrency=50 --protocol=ssh --scm=gitlab --base-url=https://gitlab.com --token=CP-SevCew54pjq_JnuDb
- ghorg安装参考官网即可
- 上述token即gitlab账户的
access token
,必填
执行统计报告生成
- cloc安装
npm i cloc
- 我将循环遍历仓库,执行统计并合并最终报告的脚本做了下封装,这里贴出来,不感兴趣实现的,直接CV使用即可。
- 脚本中4个变量需要根据实际情况,进行配置
const fs = require('fs'); const { execSync } = require('child_process'); // 项目代码 const rootDir = ''; // CLOC Shell路径 const clocCommand = '/Users/qhe/.nvm/versions/node/v10.16.0/bin/cloc'; // 报告生成临时路径 const reportFiles = ''; // 总报告名称 const reportFile = ''; const deleteFolderRecursive = function (path) { if (fs.existsSync(path)) { fs.readdirSync(path).forEach(function (file, index) { var curPath = path + '/' + file; if (fs.lstatSync(curPath).isDirectory()) { deleteFolderRecursive(curPath); } else { fs.unlinkSync(curPath); } }); fs.rmdirSync(path); } }; /** * @description * 遍历生成每个仓库代码报告 */ function createReport() { return new Promise((resolve) => { fs.readdir(rootDir, (_0, files) => { files.forEach((file) => { if (fs.statSync(`${rootDir}/${file}`).isFile()) { return; } execSync( `${clocCommand} ${rootDir}/${file} --csv --out=out/${file}.csv`, (error, stdout, stderr) => { if (error) { console.log(`error: ${error.message}`); return; } if (stderr) { console.log(`stderr: ${stderr}`); return; } console.log(`stdout: ${stdout}`); } ); }); resolve(); }); }); } /** * @description * 合并每个仓库的报告到一个CSV文件中 */ function mergeReport() { let mergedReport = ''; fs.readdir(reportFiles, (_0, files) => { files.forEach((file) => { if (file === '.DS_Store') { return; } const contents = fs.readFileSync(`${reportFiles}/${file}`, { encoding: 'utf8', }); mergedReport += `${file.replace(/\.csv/, '')},,,,,\n` + contents; }); deleteFolderRecursive(reportFiles); fs.writeFile(reportFile, mergedReport, function (err) { if (err) { console.log(err); } }); }); } createReport().then(() => mergeReport());
- cloc安装
结果
- 利用Excel筛选,即可操作这样完整的数据。比如利用筛选,我快速了解到项目组共34个仓库,代码行数1340244,不得不说还是挺多的。。。。当然因为项目中存在部分vendor资源,即水分。
- 发现cloc进行统计存在一个问题,比如文件夹下直接统计N个项目的代码量与如上循环遍历统计的代码量之和存在较大出入。我认为具体仓库统计的是对的。
写到最后
如上,操作已经脚本化,类似需求以后无非2句命令即可。妈妈再也不担心如何做项目代码统计了。