zoukankan      html  css  js  c++  java
  • Egret 4.x 和 5.x 项目共存的方法

    正常来说,安装了对应的引擎之后,4.x的项目和5.x的项目是各自编译互相不影响的。

    但是由于引擎的bug,我在实际使用中,出现了编译5.x的项目正常,之后切换到4.x的项目编译时,显示正常编译完毕,但是实际会变成使用5.x的引擎来编译的情况,结果是lib下的文件变成了5.x的lib,当我手动替换了lib之后,发现运行报错,原来bin-debug下的js也变成了5.x的编译之后的代码,无法兼容4.x的lib的问题。

    接下来就是一通尝试,包括重启,重装引擎等等,中间还出现了4.x编译出现一直在编译中不结束的bug(头痛),一直没有解决这个问题,导致4.x的项目无法编译。

    快奔溃时,终于找到如下的解决方法:

    命令行进入4.x项目,执行clean命令:

    egret clean

    命令执行完毕后,再编译就正常了。

    另外还发现,只要5.x进行过编译的命令,就会出现这个问题,其它命令正常,希望官方可以修复这个bug。

    手动实现用指定版本引擎来编译项目

    这个算是在尝试中得到的一点经验,记录一下,当时想,我手动调用指定的版本的引擎来编译是不是就可以避开这个bug了(后面证明不能避开这个bug)。

    我们调用egret命令时,实际上是在环境变量中寻找名为egret的可执行文件,我的机器是在目录C:UsersAdministratorAppDataRoaming pm下的egret.cmd文件,打开该文件后我们可以发现实际上是用node调用执行位于引擎安装目录下的selector.js文件,我的全路径是C:Program Files (x86)EgretEgretLauncher esourcesappenginewinselector.js,selector.js文件会获取用于编译的版本,同时会得到这个版本引擎的位置,然后调用引擎目录下的toolsinegret文件执行即可,比如我的4.1.0的全路径是C:UsersAdministratorAppDataRoamingEgretengine4.1.0 oolsinegret,egret文件又会调用Entry.js文件进行实际的执行。

    上面是调用流程,有兴趣的朋友可以自行查看引擎的编译js代码。

    我们只要自己写一个自定义调用的方法即可,我的5.x的引擎放在E:\Egret\5.1.2的目录下,我在C:UsersAdministratorAppDataRoaming pm下新建了两个文件,如下:

    egret2.cmd

    "C:Program Files (x86)EgretEgretLauncher
    esourcesappenginewin
    ode.exe" --max-old-space-size=2000 "C:UsersAdministratorAppDataRoaming
    pmegret2.js" %*

    egret2.js

    1 function entry() {
    2     process.env["EGRET_PATH"] = "E:\Egret\5.1.2";
    3     require("E:\Egret\5.1.2\tools\bin\egret");
    4 }
    5 
    6 entry();

    由于这个引擎已经在引擎面板中移除了,还需要添加5.1.2的引擎到引擎组中,打开E:Egret5.1.2 oolsprojectProjectData.js文件,找到下面的代码:

     1 EngineData.prototype.init = function () {
     2 return __awaiter(this, void 0, void 0, function () {
     3     var egretjs, data, item, value;
     4     return __generator(this, function (_a) {
     5         egretjs = this.getLauncherLibrary();
     6         data = egretjs.getAllEngineVersions();
     7         for (item in data) {
     8             value = data[item];
     9             this.versions.push({ version: value.version, path: value.root });
    10         }
    11         return [2 /*return*/];
    12     });
    13 });
    14 };

    改为下面的样子:

     1 EngineData.prototype.init = function () {
     2 return __awaiter(this, void 0, void 0, function () {
     3     var egretjs, data, item, value;
     4     return __generator(this, function (_a) {
     5         egretjs = this.getLauncherLibrary();
     6         data = egretjs.getAllEngineVersions();
     7         for (item in data) {
     8             value = data[item];
     9             this.versions.push({ version: value.version, path: value.root });
    10         }
    11         this.versions.push({ version: "5.1.2", path: "E:\Egret\5.1.2" });
    12         return [2 /*return*/];
    13     });
    14 });
    15 };

    下面使用命令行进入5.x项目,执行下面的命令即可:

    egret2 build

    然后发现编译成功,但是回来在编译4.x时还是老样子,还是使用5.x的引擎,但是,如果使用clean则不会出现问题,同时clean也会编译项目,所以编译5.x的项目时使用下面的命令即可:

    egret2 clean
  • 相关阅读:
    编写 iPhone Friendly 的 Web 应用程序
    WebService的安全性讨论【身份识别】
    使用InstallShield系统变量的缺省值
    数据库用户操作相关
    TFS2010安装
    微软实验虚拟机下载地址
    生成18位不重复的ID
    Linux 账户 帐户管理 文件权限 权限管理
    Chrome 插件开发
    Ubuntu 环境变量 设置
  • 原文地址:https://www.cnblogs.com/hammerc/p/8195211.html
Copyright © 2011-2022 走看看