Node.js 是一种运行在服务端的 JavaScript 运行环境,让开发者能够使用 JavaScript 编写命令行工具和服务器端应用程序。本文将介绍如何使用 Node.js 计算当前文件夹和子目录下所有代码文件的行数。
1. 确定需求
我们需要通过遍历项目的所有文件夹和子目录,找到所有代码文件并统计它们的行数。在这个需求中,我们需要考虑以下几个方面:
- 怎样遍历一个文件夹以及子目录
- 怎样判断一个文件是不是代码文件
- 怎样统计一个文件的行数
2. 代码实现
下面的代码将展示如何实现这个需求:
const fs = require('fs');
const path = require('path');
function getLinesCount(file) {
const content = fs.readFileSync(file, 'utf8');
return content.split('\n').length;
}
function isCodeFile(file) {
return /\.(js|jsx|ts|tsx|html|css|scss|less)$/.test(file);
}
function traverseFolder(folder) {
let count = 0;
const files = fs.readdirSync(folder);
files.forEach((file) => {
const filePath = path.join(folder, file);
if (fs.statSync(filePath).isDirectory()) {
count += traverseFolder(filePath);
} else if (isCodeFile(filePath)) {
count += getLinesCount(filePath);
}
});
return count;
}
const totalLines = traverseFolder(path.resolve(__dirname));
console.log(`Total lines: ${totalLines}`);
代码逐行解释:
- 我们首先引入了 Node.js 自带的文件系统模块
fs
和路径模块path
。 getLinesCount
函数接收一个文件的绝对路径,并返回该文件的行数。它首先使用fs.readFileSync
方法读取文件内容,然后通过split('\n')
将文件内容按照换行符拆分成一行一行的文本,最后返回数组的长度。这里使用sycn
方法是因为我们需要等到文件内容读取完成后才能对其进行处理。提醒:另外需要注意的是,这种读取大文件的方式可能会耗费过多的内存。isCodeFile
函数接收一个文件名,并返回一个布尔值,判断该文件是否是代码文件。这里我们使用了正则表达式对常见的代码文件扩展名进行匹配。traverseFolder
函数接收一个文件夹的绝对路径,并返回该文件夹及其子目录下所有代码文件的行数。它通过fs.readdirSync
方法读取文件夹下的所有文件,并使用forEach
方法遍历每一个文件,判断是一个文件夹还是代码文件。如果是文件夹,递归调用traverseFolder
函数,并将返回的行数添加到计数器count
中。如果是代码文件,调用getLinesCount
函数并将返回的行数添加到计数器中。注意,我们使用path.join
方法将文件夹路径和文件名拼接成文件的绝对路径。- 我们最后调用了
traverseFolder
函数,并将项目根目录的绝对路径作为其参数。最后输出计数器中的行数,完成我们的需求。
以下是两个示例:
示例1
我们假设当前项目的目录结构如下:
├── node_modules/
├── src/
│ ├── index.js
│ └── utils/
│ └── helpers.js
├── test/
│ └── index.test.js
├── package.json
└── README.md
我们运行上述代码后,将得到如下的输出:
Total lines: 38
示例2
我们假设当前项目的目录结构如下:
├── node_modules/
├── src/
│ ├── index.js
│ └── utils/
│ ├── helpers.js
│ ├── math.js
│ └── string.js
├── test/
│ ├── index.test.js
│ └── utils/
│ ├── helpers.test.js
│ └── math.test.js
├── package.json
└── README.md
我们运行上述代码后,将得到如下的输出:
Total lines: 72
3. 总结
使用 Node.js 遍历当前文件夹和子目录下所有代码文件并统计其行数是一个非常有用的工具,帮助我们更好地管理和维护代码库。在实现过程中,我们需要考虑到遍历文件夹、判断文件是否为代码文件以及统计文件行数等方面。同时,我们需要注意使用 sync
方法可能会耗费过多的内存。我希望本文对您有所帮助,欢迎提出您的问题和建议,我将竭诚回答。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.JS枚举统计当前文件夹和子目录下所有代码文件行数 - Python技术站