const fs = require("fs");const { join, resolve } = require('path');const execSync = require('child_process').execSync;const { mergeUrl } = require('./url.utils');const findPath = resolve('./dist/template');const rootPath = resolve('./');//文件版本记录const fileVersionNote = {};const toComPath = path => path.replace(//g, '/');//获取版本号const getVersion = (dir, fileName) => {    let dirPathPart = toComPath(dir).split('/');    dirPathPart.pop();    let dirPath = dirPathPart.join('/');    fileName = fileName.replace(/^s*(.*?)s*$/, '$1');    if (!/^//.test(fileName)) {        fileName = join(dirPath, fileName).replace(rootPath, '');    }else{        fileName = 'dist' + fileName;    }        return getGitCommitVersion(toComPath(fileName).replace(/^/(.*?)$/, '$1'));}//获取git文件版本号const getGitCommitVersion = (file) => {    let gv = null;    if(/?/.test(file)){        file = file.replace(/^(.*?)?.*?$/, '$1');    }    let noteV = fileVersionNote[file]    if (typeof noteV !== 'string' || noteV === '') {        if (fs.existsSync(file)) {            try {                gv = execSync(`git log ${file} | grep commit | awk 'NR==1' | awk -F ' ' '{print $2}'`);                gv = gv.toString();            } catch (error) { }        }        if (typeof gv !== 'string' || gv.length < 10) {            console.log('版本号获取谬误', file);            noteV = '';        }else{            noteV = gv.substr(0, 7);            console.log('新文件git提交号:', file, noteV);        }        fileVersionNote[file] = noteV;    }    return noteV;}//读取所有的htmlfunction findHtmlAndAddVersion(dir) {    if (fs.existsSync(dir)) {        fs.stat(dir, (err, stat) => {            if (err || !stat) {                return console.error('读取文件状态谬误', err);            } else {                if (stat.isFile()) {                    //只是读取html文件                    if (/.htm(l){0,1}$/i.test(dir)) {                        fs.readFile(dir, 'utf8', (err, data) => {                            if (err) {                                return console.error('读取文件谬误', err);                            } else {                                let html = data.replace(/<link(.*?)hrefs*=s*(['"])(.*?)2(.*?)>/gi, ($0, $1, $2, $3, $4, $5) => {                                    if (/^s*http[s]{0,1}:///i.test($3)) {                                        return $0;                                    } else {                                        return `<link${$1}href="${mergeUrl($3, { _gv: getVersion(dir, $3) })}"${$4}>`;                                    }                                }).replace(/<script(.*?)srcs*=s*(['"])(.*?)2(.*?)>(.*?)</script>/gi, ($0, $1, $2, $3, $4, $5) => {                                    if (/^s*http[s]{0,1}:///i.test($3)) {                                        return $0;                                    } else {                                        return `<script${$1}src="${mergeUrl($3, { _gv: getVersion(dir, $3) })}"${$4}>${$5}</script>`;                                    }                                });                                fs.writeFileSync(dir, html, function (err) {                                    if (err) {                                        return console.error('文件写入失败', err);                                    }                                });                            }                        });                    }                } else if (stat.isDirectory()) {                    fs.readdir(dir, function (err, files) {                        if (err || !Array.isArray(files)) {                            return console.error('读取文件夹谬误', err);                        } else {                            files.forEach(file => {                                findHtmlAndAddVersion(join(dir, file));                            });                        }                    });                } else {                    console.error('文件类型辨认谬误', stat);                }            }        });    } else {        console.error('文件夹不存在!!!', dir);    }}//增加版本号findHtmlAndAddVersion(findPath);