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

avatar
作者
猴君
阅读量: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(); 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!