您好,登錄后才能下訂單哦!
使用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 = 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() }) } }) }) //為空時(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.js lines.js 56 package.json 6 local\en-US.js 122 local\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 = 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() }) } }) }) //為空時(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ì)億速云網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。