egret 白鹭的编译太慢了 自己写了一个

用的swc
他会检测git的改变

const simpleGit = require('simple-git');
const fs = require('fs');
const path = require('path');
// 初始化 simple-git
const swc = require('@swc/core');
const baseDir = 'D:\\project';
const gameDir = 'game\\module\\abcdefg';
const gitDir = 'D:\\project';
const git = simpleGit(gitDir);
const crypto = require('crypto');

async function buildChangedTsFiles() {
    try {
        // 获取工作目录和暂存区的更改文件
        const statusSummary = await git.status();
        // 合并所有更改的文件名(已修改、已新增、已删除等)
        const changedFiles = [
            ...statusSummary.modified,
            ...statusSummary.created,
            ...statusSummary.not_added
        ];
        const changedTsFiles = changedFiles.filter(file => file.endsWith('.ts'));
        if (changedTsFiles.length > 0) {
            console.log('更改的 TypeScript 文件:');
            changedTsFiles.forEach(file => {
                buildOne(path.join(gitDir, file));
            });
        }
    } catch (error) {
        console.error(`Error: ${error.message}`);
    }
}

function buildPath() {
    const inputDir = baseDir + "src\\" + gameDir;
    const outputDir = baseDir + "bin-debug\\" + gameDir;
    fs.mkdirSync(outputDir, { recursive: true });
    const files = fs.readdirSync(inputDir).filter(file => file.endsWith('.ts'));
    files.forEach(file => {
        buildOne(path.join(inputDir, file));
    });
}

var builded = {};

function buildOne(filePath) {
    if (builded[filePath] != null) {
        return;
    }
    let fileName = path.basename(filePath);
    const code = fs.readFileSync(filePath, 'utf-8');
    const hash = crypto.createHash('md5');
    hash.update(fileName);
    hash.update(code);
    let hashValue = hash.digest("hex");
    // console.log("检测改变:" + filePath);
    if (hashObj[filePath] == hashValue) {
        // console.log("没改变");
        return;
    }
    console.log(filePath, hashValue);
    hashObj[filePath] = hashValue;
    builded[filePath] = 1;
    console.log("编译:" + filePath);

    let out = filePath.replace(/\.ts$/, '.js').replace("src", "bin-debug");
    let output = swc.transformSync(code, {
        filename: fileName
    });
    fs.writeFileSync(out, output.code, 'utf-8');
}

const hashFilePath = path.join(__dirname, 'hashes.json');
var hashObj;

function readHash() {
    if (fs.existsSync(hashFilePath)) {
        hashObj = JSON.parse(fs.readFileSync(hashFilePath, 'utf-8'));
    } else {
        hashObj = {};
    }
}

function saveHashes() {
    // console.log("save success");
    // console.log(hashObj);
    fs.writeFileSync(hashFilePath, JSON.stringify(hashObj, null, 2), 'utf-8');
}

function buildHash() {
    for (const key in hashObj) {
        buildOne(key);
    }
}

async function run() {
    readHash();
    buildHash();
    // buildPath();
    await buildChangedTsFiles();
    saveHashes();
    console.log("编译完成");
}

run();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值