egret 白鹭的编译太慢了 自己写了一个
创始人
2024-12-26 01:38:35
0

用的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(); 

相关内容

热门资讯

透视辅助!wpk透视插件,hh... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
一分钟揭秘“wepoker透视... 一分钟揭秘“wepoker透视破解版”开挂(透视)辅助安装(2026新版教程!有挂解密);亲,这款游...
透视辅助!wepoker可以免... 透视辅助!wepoker可以免费玩吗,wepoker有没有机器人,正版开挂辅助软件(透视新版有挂);...
透视最新“werplan怎么透... 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1、软件助手是一款功...
透视辅助!wepoker插件下... 拱趴大菠萝万能挂图解开挂教程视频分享装挂详细步骤在当今的网络游戏中,拱趴大菠萝万能挂图解作为一种经典...
玩家科普“hhpoker透视脚... 玩家科普“hhpoker透视脚本”开挂(透视)辅助下载(攻略教程真是有挂)ai黑科技系统规律教程开挂...
透视辅助!wpk软件是真的吗,... 透视辅助!wpk软件是真的吗,德扑圈透视,科技开挂辅助脚本(透视了解有挂);1、很好的wpk软件是真...
科普攻略“wepoker辅助透... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
透视辅助!wepoker私人局... wepoker私人局辅助器怎么用开挂教程视频分享装挂详细步骤在当今的网络游戏中,wepoker私人局...
透视存在“德普辅助软件”开挂(... 透视存在“德普辅助软件”开挂(透视)辅助平台(安装教程有挂规律)【无需打开直接搜索加薇1367043...