使用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)注明出處,謝謝!
新聞熱點(diǎn)
疑難解答