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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux_线程的使用

目录 1、线程与进程的关系 2、线程的优缺点 3、创建线程 4、查看启动的线程 5、验证线程是共享地址空间的 6、pthread_create的重要形参 6.1 线程id 6.2 线程实参 7、线程等待 8、线程退出 9、线程取消 10、线程tcb 10.1 线程栈 11、创建多线程 12、__th…

VS2019安装MFC组件

VS2019支持的MFC版本是mfc140 ~ mfc142版本,它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下: IDE发布时间工具集版本MSC_VERMSVCMFC版本dllVisual C6.01998V601200MSVC6.06.0mfc42.dll、mfcce400.dllVisual Studio 2002…

【面试题】手撕缓存LRU

设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能 put(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值 对于put(key, value)来说,我们需要…

如何设计数据中心100G网络光纤布线

随着全球企业对带宽的需求呈指数级增长,数据中心需要升级以增强其计算、存储和网络能力。数据中心从10G/25G向100G迁移成为必然趋势。随着网络升级,数据中心的光纤布线系统也需要随之优化。本文将指导您如何设计数据中心100G网络光纤布线。 100G以太网的…

python-快速上手爬虫

目录 前言 爬虫需谨慎,切勿从入门到入狱! 一点小小的准备工作 直接上手爬取网页 1.获取UA伪装 2.获取url 3.发送请求 4.获取数据并保存 总结 前言 爬虫需谨慎,切勿从入门到入狱! 一点小小的准备工作 对pip进行换源&#xf…

libevent的event管理相关接口

目录 4. 事件管理4.1 event_new功能备注原型 4.2 event_free功能备注原型 4.3 event_debug_unassign功能 备注4.4 event_add功能:备注:原型: 4.5 event_del功能备注原型 4.6 event_base_once功能备注原型: 4.7 event_pending功能备注原型 4.8…

Censot7 使用 yum 报错:Could not resolve host: mirrorlist.centos.org

解决方案:替换成阿里的镜像地址。 1:先备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2:新建一个文件 touch /etc/yum.repos.d/CentOS-Base.repo 3:在新文件里写入以下内容 [base] name…

基于微信小程序图书馆座位预约系统设计与实现

链接: 文档和工程文件地址: ** 2、未完待续:请到目标位置下载 ** 链接: 文档和工程文件地址:

分布式搜索之Elasticsearch入门

Elasticsearch 是什么 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 Elastic Stack 又是什么呢&a…

排序系列 之 快速排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素base,利用base将待排序的序列分…

【吊打面试官系列-ZooKeeper面试题】分布式集群中为什么会有 Master?

大家好,我是锋哥。今天分享关于 【分布式集群中为什么会有 Master?】面试题,希望对大家有帮助; 分布式集群中为什么会有 Master? 在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行&#xff0c…

Leetcode1305.两颗二叉搜索树中的所有元素

1.题目要求: 给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.2.思路: 我这个方法采用的是设立一个数组,然后用前序遍历把值存入数组中,然后用qsort给它排序 3.代码: /*** Definiti…

基本类型和包装类型的区别包装类型的缓存机制自动拆箱与自动装箱

基本类型和包装类型的区别是什么 存储方式:基本类型存储一般情况下储存在栈中(这里指的是局部变量),而基本类型的成员变量比如类的属性,会存储在堆之中。而包装类型我们都知道是引用类型存储在堆内存之中。 占用空间&…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-21 VTC视频时序控制器设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

蚂蚁集团推出EchoMimic:能通过音频和面部标志生成逼真的肖像动画视频

蚂蚁集团最近推出了一项名为EchoMimic的新技术。能通过音频和面部标志生成逼真的肖像动画视频,让你的声音和面部动作被完美复制到视频中,效果自然如照镜子。 EchoMimic不仅可以单独使用音频或面部标志点生成肖像视频,也可以将两者结合&#…

任意空间平面点云旋转投影至水平面—罗德里格旋转公式

1、背景介绍 将三维空间中位于任意平面上的点云数据,通过一系列的坐标变换(平移旋转),使其投影到XOY平面上,同时保证点云的几何中心与XOY平面的原点重合,同时点云形状保持不变。具体效果如下,具…

Vue中如何封装接口

在Vue项目中封装接口通常是指将HTTP请求(如GET、POST等)封装成可复用的函数或方法,以便于在组件中方便地调用。这样的封装有助于减少代码重复,增强代码的可维护性和可读性。以下是一个基于Vue和Axios(一个基于Promise的…

深入探究理解大型语言模型参数和内存需求

概述 大型语言模型 取得了显著进步。GPT-4、谷歌的 Gemini 和 Claude 3 等模型在功能和应用方面树立了新标准。这些模型不仅增强了文本生成和翻译,还在多模态处理方面开辟了新天地,将文本、图像、音频和视频输入结合起来,提供更全面的 AI 解…

MySQL MVCC原理

全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列: 1、trx_id:每次一个事务对某条…

vue-treeselect

一、属性及属性值 属性类型默认值用途allowClearingDisabledBooleanfalse是否允许重置值,即使有禁用的选定节点allowSelectingDisabledDescendantsBooleanfalse 当选择/取消选择祖先节点时,是否应选择/取消选中其禁用的后代 可与allowClearingDisabled道…