美文网首页
egret(旧版本)自动增量编译

egret(旧版本)自动增量编译

作者: PurySun | 来源:发表于2020-09-04 15:49 被阅读0次

编译耗时分两部分:ts转换js和分析文件依赖顺序。

详细原理见:
https://mp.weixin.qq.com/s/_uMt3uNSiqffzk0EAd6G9A

官方提升速度的版本是Egret Pro

如果egret版本是旧版本,不支持实际应用ts增量编译。

本文用折中方式应用增量编译,目的是提升编译速度,附带提升调试加载速度。

1.安装版本大于3.4的typescript

npm -g install typescript 

查看版本

tsc -v

2.启动监测模式

注释egret默认的编译方式, 清空commands或者替换为第3步的合并文件插件:

egret.png

一般文件改动只会编译对应文件,删除、新增操作会全量或半全量编译,此时最好清理项目尽量全量编译一次。

项目根目录控制台输入:

tsc -w

启动后默认会全量编译一次。

3.合并编译后文件,提高调试加载速度(可选)

参考插件:

/**
 * desc:合并文件插件
 * auth:pury
 * date:2020-08-25 13:40:02
 */
const fs = require('fs');
const path = require("path")

export class BuildPlugin implements plugins.Command {
    /**
     * 项目绝对路径
     */
    private _projectRoot: string;
    constructor() {
    }

    async onFile(file: plugins.File) {
        return file;
    }

    async onFinish(commandContext: plugins.CommandContext) {
        let fileName = "manifest.json";
        let projectRoot = commandContext.projectRoot;
        let manifest = fs.readFileSync(projectRoot + "/manifest.json",'utf-8');
        manifest = JSON.parse(manifest);
        let content = "";

        //-- 备份依赖文件顺序
        if (manifest.game.length > 1) {
            fs.writeFileSync(projectRoot + "/manifest-debug.json", JSON.stringify(manifest, null, '\t'));
        }
        else {
            try {
                manifest = fs.readFileSync(projectRoot + "/manifest-debug.json",'utf-8');
                manifest = JSON.parse(manifest);
            }
            catch (e) {
                console.log("========================================================");
                console.log("                             ");
                console.log("              【需要先清理一次项目!!!】               ");
                console.log("                             ");
                console.log("========================================================");
                return;
            }
        }
     
        try {
            for (let i in manifest)
            {
                let item = manifest[i];
                //-- 仅合并自定义编写的代码文件
                if (i != "game") continue;

                for (let j in item)
                {
                    let temp = item[j];
                    let tempData = fs.readFileSync(projectRoot + "/" + temp);
                    content += tempData.toString() + '\n';
                }
            }

            let outFile = "bin-debug/Main.merge.js";
            fs.writeFileSync(projectRoot + "/" + outFile, content);
            console.log("[Main.merge.js]已更新");

            manifest.game = [outFile];
            fs.writeFileSync(projectRoot + "/manifest.json", JSON.stringify(manifest, null, '\t'));
            console.log("[manifest.json]已重构");
        }
        catch (e) {
        }
    }
}

相关文章

  • egret(旧版本)自动增量编译

    编译耗时分两部分:ts转换js和分析文件依赖顺序。详细原理见:https://mp.weixin.qq.com/s...

  • Gradle增量编译一前言

    何为增量编译?在讲增量编译时首先先介绍介绍下全量编译。在增量编译诞生前每次的代码编译都是全量编译(Maven可以指...

  • 前端自动化-构思

    需求 前端项目自动化,支持编译,打包,上线,测试自动化 技术问题 1 路由配置2 增量发布3 单项目开发4 文件监...

  • scorpio项目,前端编译优化和node-server改造

    管控平台(scorpio) 相对于旧版本,本项目做了以下升级改造: 编译速度优化,旧版本编译一次需要210秒以上,...

  • 那些年干过的事(六)—无源码修改版本号

    背景: 本文是《那些年干过的事(五)--无源码程序反编译修改文字》的续集,那个旧版本程序提供自动在线升级功能,但编...

  • Android增量编译3~5秒的背后

    前篇福利-Android增量编译3~5秒介绍了增量编译神器freeline的基本使用,这篇文章主要介绍freeli...

  • Kotlin 增量编译是怎么实现的?

    前言 编译运行是一个Android开发者每天都要做的工作,增量编译对于开发者也极其重要,高命中率的增量编译可以极大...

  • Android增量编译

    buck https://buck.build/[https://buck.build/] freeline ht...

  • 安装环境

    概述 Egret基于TypeScript开发的,而TypeScript编译工具tsc是基于Node.js开发的。所...

  • 增量更新简介

    增量更新的基本原理 增量更新主要是基于开源库bsdiff中的差分算法对两个不同版本的apk文件(旧版本的apk文件...

网友评论

      本文标题:egret(旧版本)自动增量编译

      本文链接:https://www.haomeiwen.com/subject/mokzjktx.html