node统计指定文件夹内代码行数
1. 来源
- 想对于自己接触前端日常学习与思考的代码行数进行一个统计,看自己大约敲了多少代码
2.代码
const fs = require('fs') const path = require('path') function calculateCodeLines ({ directory = '', writeResFilePath = '', fileReg = /\.(js|ts|jsx|tsx|vue|html)$/, blckNameList = [], deleteComment = true },) { let totalLines = 0 let fileList = {} let fileCounts = 0 blckNameList = blckNameList.concat(['node_modules', '.lock']) function traverseFolder (dir) { const files = fs.readdirSync(dir) for (const file of files) { const filePath = path.join(dir, file) const stats = fs.statSync(filePath) if (blckNameList.some(item => filePath.includes(item))) { continue } if (stats.isDirectory()) { traverseFolder(filePath) } else if ( stats.isFile() && fileReg.test(file) // 只计算指定扩展名的文件 ) { let code = fs.readFileSync(filePath, 'utf8') // 是否去除注释 deleteComment && (code = code.replace(/\/\/(.*)/g, '')) deleteComment && (code = code.replace(/\/\*[\s\S]*?\*\//g, '')) // 统计行并且去除空行 const lines = code.split('\n').filter(line => line.trim() !== '').length // 是否写入文件 writeResFilePath && (fileList[fileCounts + 1 + '==' + filePath] = lines) // 累加代码行数 totalLines += lines fileCounts++ } } } traverseFolder(directory) writeResFilePath && (() => { fs.writeFile(writeResFilePath, JSON.stringify({ totalLines, fileCounts, fileList }, null, 2), { encoding: 'utf-8' }, (err) => { if (err) { console.log('文件写入错误', err) // zdz-log } }) })() const res = { totalLines, fileCounts } console.log(res) // zdz-log return res } calculateCodeLines({ // 要统计的文件夹路径 directory: '/Users/zdz/Desktop/learn-code', // 结果是否写入文件以及文件名称 结果为JSON字符串 writeResFilePath: '/Users/zdz/Desktop/learn-code/totalCode.json', // 要统计哪些格式的文件 fileReg: /\.(js|ts|jsx|tsx|vue|html)$/, // 要过滤哪些文件夹或者文件不算入统计 默认会忽略 'node_modules', '.lock' blckNameList: ['slintrc', '11.source-code-read', 'React_Nativ', 'onfig.js', 'config/jest/', 'ackages/', 'ue_source/', 'e/08_vue3直播项目_project-admin'], // 是否删除注释后统计 deleteComment: false, })
package.json
{ "dependencies": { "typescript": "^4.9.5" }, "scripts": { "lines":"node /Users/zdz/Desktop/learn-code/06.思考问题/02.js探索/26.统计代码行数.js" }, "semi": false }
3.结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?