Node.js实现代码行数统计命令行工具

2025/3/4
本文介绍了使用Node.js编写命令行工具来统计指定目录下特定代码文件行数的步骤,包括创建项目、安装依赖、编写主脚本等,还提及了进一步优化方向。
Node.js命令行工具项目结构示意图

要实现一个用 Node.js 编写的命令行工具来统计指定目录下特定代码文件的行数,你可以按照以下步骤进行。这个工具将允许用户指定目录和文件扩展名,然后统计这些文件的总行数。

1. 创建项目

首先,创建一个新的 Node.js 项目:

mkdir code-line-counter
cd code-line-counter
npm init -y

2. 安装依赖

我们将使用 commander 来处理命令行参数,使用 glob 来匹配文件模式:

npm install commander glob

3. 创建主脚本文件

在项目根目录下创建一个 index.js 文件:

#!/usr/bin/env node

const fs = require('fs');
const path = require('path');
const { program } = require('commander');
const glob = require('glob');

// 定义命令行参数
program
  .version('1.0.0')
  .description('A CLI tool to count lines of code in a directory')
  .requiredOption('-d, --directory <dir>', 'Directory to search')
  .requiredOption('-e, --extension <ext>', 'File extension to count (e.g., .js, .ts)')
  .parse(process.argv);

const options = program.opts();

// 统计指定目录下特定扩展名文件的行数
function countLinesInDirectory(directory, extension) {
  const pattern = path.join(directory, `**/*${extension}`);
  let totalLines = 0;

  glob(pattern, (err, files) => {
    if (err) {
      console.error('Error finding files:', err);
      return;
    }

    files.forEach(file => {
      const content = fs.readFileSync(file, 'utf8');
      const lines = content.split('\n').length;
      totalLines += lines;
      console.log(`${file}: ${lines} lines`);
    });

    console.log(`\nTotal lines in ${extension} files: ${totalLines}`);
  });
}

// 执行统计
countLinesInDirectory(options.directory, options.extension);

4. 添加可执行权限

为了让这个脚本可以直接从命令行运行,你需要给它添加可执行权限,并在 package.json 中添加 bin 字段:

chmod +x index.js

然后在 package.json 中添加:

{
  "name": "code-line-counter",
  "version": "1.0.0",
  "description": "A CLI tool to count lines of code in a directory",
  "main": "index.js",
  "bin": {
    "code-line-counter": "./index.js"
  },
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "commander": "^9.0.0",
    "glob": "^7.2.0"
  }
}

5. 全局安装

你可以将这个工具全局安装,以便在任何地方使用:

npm install -g .

6. 使用工具

现在你可以使用这个工具来统计指定目录下特定扩展名文件的行数了。例如:

code-line-counter -d ./src -e .js

这将统计 ./src 目录下所有 .js 文件的总行数。

7. 进一步优化

  • 异步处理:为了提高性能,可以使用异步文件读取和行数统计。
  • 忽略特定文件或目录:可以通过 .gitignore 或自定义忽略规则来排除某些文件或目录。
  • 支持多种扩展名:可以扩展工具以支持同时统计多种文件扩展名的行数。

这个工具是一个简单的示例,展示了如何使用 Node.js 创建一个命令行工具来统计代码行数。你可以根据实际需求进一步扩展和优化它。

标签:面试题
上次更新:

相关文章

npx完全指南:前端开发必备工具详解 | 20年架构师深度解析

本文由20年前端架构师深入解析npx工具,涵盖其核心功能、优势、高级用法、最佳实践及与npm/yarn的区别比较,帮助开发者掌握这一现代前端开发利器。

·前端开发

Astro 静态站点生成器:构建高性能网站的最佳选择

Astro 是一个专注于构建快速、轻量级网站的静态站点生成器,支持多种前端框架,采用岛屿架构减少 JavaScript 加载,提升性能。

·前端开发

Weex 跨平台移动开发框架:核心特性与使用指南

Weex 是由阿里巴巴开源的跨平台移动开发框架,支持使用 Vue.js 或 Rax 构建高性能的 iOS、Android 和 Web 应用。本文详细解析了 Weex 的核心特性、架构、工作流程、组件和模块、开发工具、优缺点、应用场景及未来发展。

·前端开发

ECharts 与 DataV 数据可视化工具对比分析 | 选择指南

本文详细对比了 ECharts 和 DataV 两个常用的数据可视化工具,包括它们的设计目标、优缺点、使用场景和技术栈,帮助读者根据具体需求选择合适的工具。

·前端开发

前端部署后通知用户刷新页面的常见方案 | 单页应用更新提示

本文介绍了在前端部署后通知用户刷新页面的几种常见方案,包括WebSocket实时通知、轮询检查版本、Service Worker版本控制、版本号对比、自动刷新、使用框架内置功能以及第三方库。每种方案的优缺点和示例代码均有详细说明。

·前端开发

file-saver:前端文件下载的 JavaScript 库使用指南

file-saver 是一个用于在浏览器端保存文件的 JavaScript 库,支持生成和下载多种文件格式,如文本、JSON、CSV、图片、PDF 等。本文详细介绍其安装、基本用法、兼容性及与其他工具(如 jszip)的结合使用。

·前端开发

MSW(Mock Service Worker):API 模拟工具的核心优势与使用指南

MSW(Mock Service Worker)是一个用于浏览器和 Node.js 的 API 模拟工具,通过 Service Worker 拦截网络请求,支持 REST 和 GraphQL,适用于开发、测试和调试场景。本文详细介绍 MSW 的核心优势、快速上手步骤、高级用法、适用场景及与其他 Mock 工具的对比。

·前端开发

Preact:轻量级 JavaScript 库,React 的高性能替代方案

Preact 是一个轻量级的 JavaScript 库,提供与 React 相似的 API 和开发体验,但体积更小(约 3-4KB,gzip 后)。它专注于高性能和低资源消耗,特别适合对性能敏感或需要快速加载的 Web 应用。

·前端开发

WASI标准与WebAssembly跨平台生态的未来趋势分析 | 技术深度解析

本文深入探讨了WASI(WebAssembly System Interface)标准的背景、意义及其对WebAssembly跨平台生态的影响。文章分析了WASI在服务器端应用、边缘计算和IoT设备中的应用,以及技术栈和工具链的演进,最后展望了WASI对未来前端开发的影响和最佳实践建议。

·前端开发

WebAssembly沙箱逃逸风险解析及缓解方案 | 前端安全指南

本文深入探讨了WebAssembly(Wasm)在前端开发中的应用及其面临的安全风险,特别是沙箱逃逸问题。文章详细解析了沙箱逃逸的常见途径,并提供了包括内存安全、API安全、JIT安全和宿主环境安全在内的综合缓解方案,以及工程化实践建议,旨在帮助开发人员有效降低安全风险,确保应用的安全性和稳定性。

·前端开发