08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / build / build-watch.js
caibinghong on 19 May 2021 add
const fs = require("fs");
const path = require('path');
const chalk = require('chalk');
const execFileSync = require('child_process').execFileSync;
// 需要忽略的文件夹
const ignores = 'dist,node_modules,build'.split(',')
const buildFile = path.join(__dirname, 'build.js')
// 有时候修改文件后会连续回调两次,用这个时间过滤掉第二次重复的回调
var lastUpdateTime = 0;

var checkModule = function(dir){
    var files = fs.readdirSync(dir),flag=false;
    for (var i = 0; i < files.length; i++) {
        if (ignores.includes(files[i])) continue
        var file =files[i]
        var stat = fs.statSync( dir + '/' + file)
        if (stat.isDirectory() != true && file=="package.json") {
            flag = true;
            break;
        }
    }
    return flag;
}

function watch(dir) {
    fs.watch(dir, (event, filename) => {
        if (ignores.includes(filename)) return;//false true
        
        var diff = Date.now() - lastUpdateTime
        lastUpdateTime = Date.now()
        if (diff < 100) return;
        if(checkModule(dir)==false){
            return;
        }
        // TODO: do anything ...
        console.log('正在编译:',buildFile,dir,filename)
        execFileSync( 'node', [buildFile, dir]);
    })

    // 原生监控不能监控到子文件夹中的文件改变事件,遍历之
    var files = fs.readdirSync(dir);
    for (var i = 0; i < files.length; i++) {
        if (ignores.includes(files[i])) continue
        var file = dir + '/' + files[i]
        var stat = fs.statSync(file)
        if (stat.isDirectory() == true) {
            watch(file);
        }
    }
}


// 开始监控当前目录
watch('.')
console.log('start watch...');