Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019-08-23 14:45
1826 查看
使用Node.JS的大多数用记事本开发,有时侯会需要统计工程代码量,然后记事本大部分没有这个功能。其实用node.js几行代码就可以实现。
var path = require('path') var fs = require('fs') //需要统计的文件类型,可自己删减,均小写 var codesFiles = [ '.css', '.js', '.html', '.tmpl', '.part', '.json', '.md', '.txt', '.yml', '.java', '.cs', '.c', '.h', '.cpp', '.xml', '.go', '.py' ] var LINES = 0 var findFolder = function(srcDir, cb) { fs.readdir(srcDir, function(err, files) { var count = 0 var checkEnd = function() { ++count == files.length && cb && cb() } if (err) { checkEnd() return } files.forEach(function(file) { var extname = path.extname(file).toLowerCase() var srcPath = path.join(srcDir, file) fs.stat(srcPath, function(err, stats) { if (stats.isDirectory()) { findFolder(srcPath, checkEnd) } else { if (codesFiles.indexOf(extname) < 0) { checkEnd() return } fs.readFile(srcPath, function(err, data) { if (err) { checkEnd() return } var lines = data.toString().split('\n') LINES += lines.length console.log(srcPath, lines.length) checkEnd() }) } }) }) //为空时直接回调 files.length === 0 && cb && cb() }) } findFolder('./', function() { console.log('LINES:', LINES) })
使用时将此脚本文件命名为lines.js,然后复制到需要统计的文件夹下,然后执行
node lines.js
然后会统计每一个代码文件的长度,和代码总行数:
$ node lines.js lines.js 56 package.json 6 local\en-US.js 122 local\FE.zh-CN.js 306 ... LINES: 40464
更新
下面的脚本通过检测是否含有ASC0的值来判断文件是不文本文件,然后统计代码行数,但实测统计数量明显偏多。
var path = require('path') var fs = require('fs') var LINES = 0 var FILES = 0 //https://github.com/hellosean1025/study/blob/master/function.js function isTextFile( filepath, length ) { fd = fs.openSync( filepath, 'r' ); length = length || 1000; for( var i = 0;i < length;i++ ) { buf = new Buffer( 1 ); var bytes = fs.readSync( fd, buf, 0, 1, i ); char = buf.toString().charCodeAt(); if ( bytes === 0) { return true; } else if(bytes === 1 && char === 0) { return false; } } return true; } var findFolder = function(srcDir, cb) { fs.readdir(srcDir, function(err, files) { var count = 0 var checkEnd = function() { ++count == files.length && cb && cb() } if (err) { checkEnd() return } files.forEach(function(file) { var extname = path.extname(file).toLowerCase() var srcPath = path.join(srcDir, file) fs.stat(srcPath, function(err, stats) { if (stats.isDirectory()) { findFolder(srcPath, checkEnd) } else { // if (codesFiles.indexOf(extname) < 0) { // checkEnd() // return // } if (!isTextFile(srcPath)) { checkEnd() return } fs.readFile(srcPath, function(err, data) { if (err) { checkEnd() return } var lines = data.toString().split('\n') LINES += lines.length if (lines.length > 5000) { console.trace(srcPath, lines.length) } else { console.log(srcPath, lines.length) } FILES++ checkEnd() }) } }) }) //为空时直接回调 files.length === 0 && cb && cb() }) } findFolder('./', function() { console.log('LINES:', LINES) console.log('FILES:', FILES) })
总结
以上所述是小编给大家介绍的Node.JS枚举统计当前文件夹和子目录下所有代码文件行数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
您可能感兴趣的文章:
相关文章推荐
- Linux 下使用 wc 统计文件夹下所有文件的代码行数(包括子目录)
- C++ 一个统计文件夹下所有代码文件行数的小工具
- Node.JS循环删除非空文件夹及子目录下的所有文件
- UNIX命令,统计当前目录(含子目录)下所有后缀为.log的文件中ERROR出现的行数
- 利用正则表达式统计某个某个文件夹下所有java文件的 空格行数、注释行数、和代码行数
- Node.js查找当前目录下文件夹实例代码
- 遍历目录及子目录列出所有文件和文件夹的代码
- 利用Foundation框架写的小程序统计文件(文件夹内文件)的所有行数(或统计字数)
- linux下shell统计文件目录下所有代码行数
- 统计当前目录下的所有文件目录大小,不显示子目录与子文件
- Node.js使用递归实现遍历文件夹中所有文件
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- python2.7.3 统计某个文件夹下所有文件或者某个文件的行数
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- python3 计算文件夹中所有py文件里面代码行数,注释行数,空行数
- 统计文件夹内.c .cpp .py类型文件的代码行数
- 统计某个目录(含子目录)下所有java源文件中实际代码行数
- io中的文件夹创立以及遍历和递归打印所有文件及文件夹的子目录以及统计文件夹的大小
- Windows和Linux下枚举(遍历)当前文件夹下所有文件完整路径的命令行
- 遍历目录及子目录列出所有文件和文件夹的代码