完整脚本
const fs = require("fs");
const path = require("path");
// 配置项
const config = {
includeDir: "./src", // 要统计的目录
excludeDir: ["node_modules", "public", "assets"], // 要排除的目录
includeExtensions: [".js", ".jsx", ".ts", ".tsx", ".scss", "css"], // 要统计的文件扩展名
excludeExtensions: [".svg"], // 要排除的文件扩展名
excludeFiles: ["potrace.js"], // 要排除的文件名
outputFile: "code_statistics.txt", // 输出文件
};
// 用于存储统计结果
let result = [];
let totalLines = 0;
let totalFiles = 0;
// 递归统计代码行数
function countLines(dir) {
// 读取目录中的文件和子目录
const items = fs.readdirSync(dir);
items.forEach((item) => {
const fullPath = path.join(dir, item);
const stats = fs.statSync(fullPath);
// 如果是目录且不在排除列表中,递归遍历
if (stats.isDirectory()) {
const dirName = path.basename(fullPath);
if (!config.excludeDir.includes(dirName)) {
countLines(fullPath);
}
}
// 如果是文件,判断是否符合条件
if (stats.isFile()) {
const ext = path.extname(item);
const fileName = path.basename(item);
// 检查文件扩展名和文件名是否符合统计条件
if (
config.includeExtensions.includes(ext) &&
!config.excludeExtensions.includes(ext) &&
!config.excludeFiles.includes(fileName)
) {
const fileContent = fs.readFileSync(fullPath, "utf-8");
const lines = fileContent.split("\n").length;
totalLines += lines;
totalFiles += 1;
// 将每个文件的结果添加到结果数组
result.push(`${fullPath}: ${lines} lines`);
}
}
});
}
// 开始统计
countLines(config.includeDir);
// 汇总统计结果
const summary = [`Total lines of code: ${totalLines}`, `Total number of files: ${totalFiles}`];
// 将结果和汇总信息写入到指定的输出文件
fs.writeFileSync(config.outputFile, [...result, "", ...summary].join("\n"), "utf-8");
console.log(`Statistics have been written to ${config.outputFile}`);
汇总信息保存到 code_statistics.txt文件中
汇总效果