国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JS > 正文

Node.JS枚舉統(tǒng)計(jì)當(dāng)前文件夾和子目錄下所有代碼文件行數(shù)

2024-05-06 16:54:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

使用Node.JS的大多數(shù)用記事本開(kāi)發(fā),有時(shí)侯會(huì)需要統(tǒng)計(jì)工程代碼量,然后記事本大部分沒(méi)有這個(gè)功能。其實(shí)用node.js幾行代碼就可以實(shí)現(xiàn)。

var path = require('path')var fs  = require('fs')//需要統(tǒng)計(jì)的文件類(lèi)型,可自己刪減,均小寫(xiě)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()     })    }   })  })  //為空時(shí)直接回調(diào)  files.length === 0 && cb && cb() })}findFolder('./', function() { console.log('LINES:', LINES)})

使用時(shí)將此腳本文件命名為lines.js,然后復(fù)制到需要統(tǒng)計(jì)的文件夾下,然后執(zhí)行

node lines.js

然后會(huì)統(tǒng)計(jì)每一個(gè)代碼文件的長(zhǎng)度,和代碼總行數(shù):

$ node lines.jslines.js 56package.json 6local/en-US.js 122local/FE.zh-CN.js 306...LINES: 40464

更新

下面的腳本通過(guò)檢測(cè)是否含有ASC0的值來(lái)判斷文件是不文本文件,然后統(tǒng)計(jì)代碼行數(shù),但實(shí)測(cè)統(tǒng)計(jì)數(shù)量明顯偏多。

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()     })    }   })  })  //為空時(shí)直接回調(diào)  files.length === 0 && cb && cb() })}findFolder('./', function() { console.log('LINES:', LINES) console.log('FILES:', FILES)})

總結(jié)

以上所述是小編給大家介紹的Node.JS枚舉統(tǒng)計(jì)當(dāng)前文件夾和子目錄下所有代碼文件行數(shù),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 张家港市| 广宗县| 临潭县| 仁化县| 建阳市| 建水县| 嵊州市| 三穗县| 巢湖市| 宁乡县| 鸡东县| 延寿县| 蒙阴县| 吴堡县| 达孜县| 乐都县| 黄陵县| 尖扎县| 肇庆市| 鹰潭市| 牡丹江市| 乌恰县| 黑水县| 江阴市| 邯郸市| 乌恰县| 蛟河市| 和田市| 五大连池市| 天长市| 姚安县| 兴仁县| 富川| 满城县| 唐山市| 盘锦市| 长沙县| 类乌齐县| 温州市| 汉源县| 云林县|