您好,登錄后才能下訂單哦!
使用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枚舉統計當前文件夾和子目錄下所有代碼文件行數,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。