node 统计文件内代码行

node 统计文件内代码行

根据需求,将统计的文件夹中文件路径和代码行保存在本地file.txt文件,便于查阅。

var path = require('path')
var fs  = require('fs')
var codesFiles = [  '.css', '.js','.vue',  '.java',];// 扫描文件类型
var filePath = 'E:/webstorm/ady/model4dy';// 扫描文件夹路径
var LINES = 0;
var FILES = 0;

writeData("","")
findFolder(filePath, function() {
    console.log('代码总行数:',LINES)
    console.log('扫描文件数:',FILES)
    writeData('代码总行数:',LINES)
    writeData('扫描文件数:',FILES)
})



// 文件遍历
function findFolder(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
                        FILES +=1
                        console.log(srcPath, count,lines.length)
                        writeData(srcPath,lines.length)
                        checkEnd()
                    })
                }
            })
        })

        //为空时直接回调
        files.length === 0 && cb && cb()
    })
}
// 文件写入
function writeData(srcPath,lines){
    var cData = fs.readFileSync('./file.txt')//同步读取统计文件内容
    if(srcPath&&lines){
        cData = cData.toString('utf-8') + srcPath + "  " + lines+ "\n"
    }else{
        cData=""
    }
    fs.writeFileSync('./file.txt', cData)
}

参考资料
资料1
资料2

你可能感兴趣的:(js,nodejs)