用 nodejs 实现一个命令行工具,统计输入目录下面指定代码的行数
1.使用同一个链接,如何实现PC打开是web 应用、手机打开是一个H5应用2.如何保证用户的使用体验3.如何解决页面请求接口大规模并发问题4.设计一套全站请求耗时统计工具5.大文件上传6.h5如何解决移动端适配问题7.实现站点一键换肤功能实现方式有哪些8.如何实现网页加载进度条9.常见图片懒加载方式有哪些10.cookie构成部分有哪些11.DNS协议了解多少12.函数式编程了解多少13.一直在window上面挂东西是否有什么风险14.小程序为什么会有两个线程15.如何通过设置失效时间清除本地存储的数据?16.如果不使用脚手架,如果用webpack构建一个自己的react应用
17.用 nodejs 实现一个命令行工具,统计输入目录下面指定代码的行数
18.package.json 里面 sideEffects 属性的作用19.script 标签上有那些属性20.SPA 中使用 hash 路由时作用和意义21.用户访问页面白屏了,原因是啥如何排查?22.[代码实现]S 中如何实现大对象深度对比23.JavaScript 中处理 100 万数据时确保性能和流畅度的几种方法24.<script> 标签放在 HTML 文档的 <body> 内底部25.虚拟滚动加加载的原理和实现思路26.ts二刷27.promise面试题28.命令行创建 uni-app 项目29.uniapp+v3的小知识点30.ts文件忽略校验31.['',''].join(" ").trim()32.自定义导航栏交互(导航栏左上角按钮+滚动动画效果)33.可视化点击x轴标签实现标签文字切换34.运行vue -V的时候vue : 无法加载文件 C:\Users\jiaho\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本35.uniapp+vue2实现下载相关36.深度响应式劫持vue3以下是一个使用 Node.js 实现的命令行工具,用于统计输入目录下指定代码文件的行数。
实现思路
- 接收命令行参数,获取输入目录和文件扩展名(例如,
.js
、.html
、.css
等)。 - 递归遍历输入目录,查找所有符合指定扩展名的文件。
- 对于每个找到的文件,读取文件内容并统计行数。
- 输出统计结果。
代码实现
const fs = require('fs');
const path = require('path');
// 辅助函数:统计文件的行数
function countLinesInFile(filePath) {
let lineCount = 0;
try {
const content = fs.readFileSync(filePath, 'utf8');
// 按照换行符拆分内容并计算行数
lineCount = content.split(/\r\n|\r|\n/).length;
} catch (error) {
console.error(`Error reading file ${filePath}: ${error.message}`);
}
return lineCount;
}
// 辅助函数:递归遍历目录,查找指定扩展名的文件
function findFilesByExtension(dir, ext, fileList = []) {
const files = fs.readdirSync(dir);
for (const file of files) {
const fullPath = path.join(dir, file);
const stats = fs.statSync(fullPath);
if (stats.isDirectory()) {
// 是目录,继续递归遍历
findFilesByExtension(fullPath, ext, fileList);
} else if (path.extname(fullPath) === ext) {
// 是文件且符合扩展名,添加到列表中
fileList.push(fullPath);
}
}
return fileList;
}
// 主函数:处理命令行参数和调用辅助函数
function main() {
const args = process.argv.slice(2);
if (args.length < 2) {
console.error('Usage: node lineCounter.js <directory> <fileExtension>');
process.exit(1);
}
const directory = args[0];
const extension = args[1];
const files = findFilesByExtension(directory, extension);
let totalLines = 0;
for (const file of files) {
const lines = countLinesInFile(file);
totalLines += lines;
console.log(`${file}: ${lines} lines`);
}
console.log(`Total lines in ${extension} files: ${totalLines}`);
}
// 调用主函数开始执行
main();
代码解释
-
countLinesInFile(filePath)
:- 该函数接收一个文件路径作为参数。
- 使用
fs.readFileSync
以 UTF-8 编码读取文件内容。 - 使用正则表达式
/\r\n|\r|\n/
将文件内容按换行符拆分,然后统计拆分后的数组长度,得到行数。 - 若读取文件时出现错误,将错误信息打印出来。
-
findFilesByExtension(dir, ext, fileList = [])
:- 该函数接收目录路径、文件扩展名和一个可选的文件列表作为参数。
- 读取目录下的文件列表。
- 对于每个文件,检查其是目录还是文件:
- 若是目录,递归调用自身,继续查找文件。
- 若是文件且扩展名符合要求,添加到文件列表中。
-
main()
:- 该函数从命令行参数中获取目录和扩展名。
- 检查命令行参数是否足够,若不足则打印使用说明并退出程序。
- 调用
findFilesByExtension
查找指定目录下的文件列表。 - 遍历文件列表,调用
countLinesInFile
统计每个文件的行数,并累加到totalLines
。 - 打印每个文件的行数和总文件的行数。
使用说明
- 将上述代码保存为
lineCounter.js
文件。 - 打开命令行,进入该文件所在目录。
- 运行命令:
node lineCounter.js <directory> <fileExtension>
。
<directory>
是要统计的目录路径,例如:./src
。<fileExtension>
是文件扩展名,例如:.js
。
这个工具可以方便地统计指定目录下某种类型文件的行数,对于代码行数的统计和分析非常有用,有助于项目的代码管理和评估。 例如,你可以运行 node lineCounter.js./src/.js
来统计 ./src
目录下所有 .js
文件的行数。
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/p/18646180
合集:
前端小知识点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通