有没有基于Node.js的代码量统计工具?

有没有基于Node.js的代码量统计工具?

或者能在OSX下运行的也行,主要是想统计js, less, jade git就算了,要简单的

2 回复

当然可以。基于Node.js的代码量统计工具确实存在,这类工具通常被称为“SLOC”(Source Lines of Code)计数器。一个非常流行且易于使用的工具是 cloc,它可以统计多种编程语言的代码行数。虽然 cloc 本身不是用 Node.js 编写的,但它可以在 macOS 下轻松安装并使用。

不过,如果你希望使用纯 Node.js 工具来实现类似功能,可以考虑使用 codeclimate 或者自己编写一个简单的脚本。这里提供一个简单的 Node.js 脚本示例,用于统计 JavaScript、Less 和 Jade 文件的代码行数。

示例代码

首先,你需要安装一些必要的依赖项:

npm install --save glob

然后,创建一个名为 count-code-lines.js 的文件,并添加以下代码:

const fs = require('fs');
const path = require('path');
const glob = require('glob');

// 定义要统计的文件类型
const fileTypes = {
    js: ['**/*.js', '**/*.jsx'],
    less: ['**/*.less'],
    jade: ['**/*.jade']
};

// 统计代码行数的函数
function countLines(filePath) {
    const content = fs.readFileSync(filePath, 'utf-8');
    return content.split('\n').length;
}

// 遍历所有匹配的文件并统计代码行数
function countFiles(type, patterns) {
    let totalLines = 0;

    patterns.forEach(pattern => {
        glob.sync(pattern).forEach(file => {
            totalLines += countLines(file);
        });
    });

    console.log(`Total lines in ${type}: ${totalLines}`);
}

// 主函数
function main() {
    for (let type in fileTypes) {
        countFiles(type, fileTypes[type]);
    }
}

main();

使用方法

  1. 将上述代码保存到 count-code-lines.js 文件中。
  2. 在终端中运行该脚本:
    node count-code-lines.js

解释

  • glob 模块:用于匹配文件路径模式。
  • countLines 函数:读取文件并计算行数。
  • countFiles 函数:遍历所有匹配的文件并调用 countLines 函数来计算总行数。
  • main 函数:定义了需要统计的文件类型,并调用 countFiles 函数进行统计。

这样,你就可以得到项目中各种文件类型的代码行数统计结果。


当然可以。你可以使用一个名为 cloc 的命令行工具来统计代码量,它支持多种编程语言,并且可以在 macOS 下运行。cloc 不仅可以统计 JavaScript、Less 和 Jade 文件,还可以统计其他类型的文件。

示例安装与使用

安装 cloc

首先,你需要安装 cloc。可以通过 Homebrew 来安装:

brew install cloc

如果你没有安装 Homebrew,可以先安装 Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

然后安装 cloc

brew install cloc

使用 cloc

假设你的项目目录结构如下:

my-project/
├── src/
   ├── main.js
   ├── helper.js
   └── styles/
       ├── style.less
       └── partials/
           └── partial.jade
└── test/
    └── unit/
        └── test.js

你可以进入项目目录并运行以下命令来统计 js, less, 和 jade 文件的代码量:

cd my-project
cloc src/*.js src/**/*.js test/*.js src/styles/*.less src/styles/partials/*.jade

这将输出类似以下的统计结果:

      1 text files.
      1 unique files.                              

cloc 1.84  T=0.03 s (33.6 files/s, 1575.3 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
JavaScript                       3             9            107            245
Less                             1             2              0             51
Jade                             1             2              0             42
-------------------------------------------------------------------------------
SUM:                             5            15            107            338
-------------------------------------------------------------------------------

使用 Node.js 编写简单的代码量统计脚本

如果你更喜欢使用 Node.js 来实现一个简单的代码量统计工具,可以参考以下示例代码:

const fs = require('fs');
const path = require('path');

function countLines(filePath) {
  const content = fs.readFileSync(filePath, 'utf-8');
  return content.split('\n').length;
}

function walkSync(dir, fileExtFilter) {
  let results = [];
  const files = fs.readdirSync(dir);

  for (let file of files) {
    file = path.join(dir, file);
    const stat = fs.statSync(file);

    if (stat.isDirectory()) {
      results = results.concat(walkSync(file + '/', fileExtFilter));
    } else if (fileExtFilter.includes(path.extname(file))) {
      results.push({
        filePath: file,
        lineCount: countLines(file)
      });
    }
  }

  return results;
}

const directory = './src'; // 你的项目目录
const extensions = ['.js', '.less', '.jade'];

const files = walkSync(directory, extensions);

console.log("Code Line Count:");
files.forEach(file => console.log(`${file.filePath}: ${file.lineCount} lines`));

const totalLineCount = files.reduce((sum, file) => sum + file.lineCount, 0);
console.log(`Total Lines: ${totalLineCount}`);

这个脚本会遍历指定目录中的 .js, .less, 和 .jade 文件,并计算每个文件的行数。最后,它会打印出每个文件的行数以及总的行数。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!