首页 > 开发 > JS > 正文

Node.JS枚举统计当前文件夹和子目录下所有代码文件行数

2024-05-06 16:54:30
字体:
来源:转载
供稿:网友

使用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 = 0var 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.jslines.js 56package.json 6local/en-US.js 122local/FE.zh-CN.js 306...LINES: 40464

更新

下面的脚本通过检测是否含有ASC0的值来判断文件是不文本文件,然后统计代码行数,但实测统计数量明显偏多。

var path = require('path')var fs  = require('fs')var LINES = 0var FILES = 0//https://github.com/hellosean1025/study/blob/master/function.jsfunction 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枚举统计当前文件夹和子目录下所有代码文件行数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VeVb武林网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


注:相关教程知识阅读请移步到JavaScript/Ajax教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表