阅读量: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();