正常来说,安装了对应的引擎之后,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:\Users\Administrator\AppData\Roaming\npm下的egret.cmd文件,打开该文件后我们可以发现实际上是用node调用执行位于引擎安装目录下的selector.js文件,我的全路径是C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js,selector.js文件会获取用于编译的版本,同时会得到这个版本引擎的位置,然后调用引擎目录下的tools\bin\egret文件执行即可,比如我的4.1.0的全路径是C:\Users\Administrator\AppData\Roaming\Egret\engine\4.1.0\tools\bin\egret,egret文件又会调用Entry.js文件进行实际的执行。

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

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

egret2.cmd

"C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\node.exe" --max-old-space-size=2000 "C:\Users\Administrator\AppData\Roaming\npm\egret2.js" %*

egret2.js

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

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

 EngineData.prototype.init = function () {
return __awaiter(this, void 0, void 0, function () {
var egretjs, data, item, value;
return __generator(this, function (_a) {
egretjs = this.getLauncherLibrary();
data = egretjs.getAllEngineVersions();
for (item in data) {
value = data[item];
this.versions.push({ version: value.version, path: value.root });
}
return [2 /*return*/];
});
});
};

改为下面的样子:

 EngineData.prototype.init = function () {
return __awaiter(this, void 0, void 0, function () {
var egretjs, data, item, value;
return __generator(this, function (_a) {
egretjs = this.getLauncherLibrary();
data = egretjs.getAllEngineVersions();
for (item in data) {
value = data[item];
this.versions.push({ version: value.version, path: value.root });
}
this.versions.push({ version: "5.1.2", path: "E:\\Egret\\5.1.2" });
return [2 /*return*/];
});
});
};

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

egret2 build

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

egret2 clean

Egret 4.x 和 5.x 项目共存的方法的更多相关文章

  1. 测可用!ecshop立即购买和加入购物车按钮共存的方法

    网上方法很多,但都不能用的,有的是老版本的,有的方法本身就不完整. 应大多数客户要求,我们重新整理下教程,希望对大家有用. 亲测可用!ecshop立即购买和加入购物车按钮共存的方法 第一步:修改ecs ...

  2. Eclipse导入Android项目的正确方法

    转自Eclipse导入Android项目的正确方法 看网上流传的Eclipse导入项目的方法都是在新建Android程序时使用"Create project form existing so ...

  3. eclipse安卓引入库项目的正确方法

    之前清单文件里theme主题老是改不成库项目里定义好的主题@style/Theme.AppCompat.Light,只能用默认主题@style/AppTheme <application and ...

  4. Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

    [原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结by edata @2017-5-1objectARX 2015 Wizard安装向导在Wi ...

  5. PHP获取项目所有控制器方法名称

    PHP获取项目所有控制器方法名称 //获取模块下所有的控制器和方法写入到权限表 public function initperm() { $modules = array('admin'); //模块 ...

  6. JetBrains WebStorm打开多个项目project的方法

    JetBrains WebStorm打开多个项目project的方法File-->Settings-->Directories点击右侧 + Add content root,选择目录后即可 ...

  7. ASP.NET MVC 此安装不支持该项目类型解决方法

    http://www.cnblogs.com/younggun/archive/2011/03/03/1969498.html ASP.NET MVC  此安装不支持该项目类型解决方法 打开 .csp ...

  8. Windows下Python2与Python3两个版本共存的方法详解

    来源:http://www.jb51.net/article/105311.htm 这篇文章主要介绍了Windows下Python2与Python3两个版本共存的方法,文中介绍的很详细,对大家具有一定 ...

  9. JavaWeb之(1)Tomcat安装及项目的发布方法

    Tomcat安装及项目的发布方法 Tomcat安装 1.直接解压,然后找到bin/startup.bat 2.双击,如果出现命令行界面且最后一句为"信息: Server startup in ...

随机推荐

  1. 使用CCS调试基于AM335X的SPL、Uboot(原创)

    使用CCS调试基于AM335X的SPL.Uboot 一.开发环境 1.硬件平台:创龙AM3359核心板 2.SDK版本:ti-processor-sdk-linux-am335x-evm-03.00. ...

  2. JAVAScript:前端模块化开发

    目录 一:前端模块化概要 1.1.模块化概要 1.2.函数封装 1.3.对象封装 1.4.立即执行函数表达式(IIFE) 1.5.模块化规范 1.5.1.CommonJS 1.5.2.AMD((Asy ...

  3. linux 硬盘分区与格式化挂载 (二)

    1. 文件系统的挂载与卸载(详见linux系统管理P406)1) 掌握挂载的定义:挂载指将一个设备(通常是存储设备)挂接到一个已存在的目录上.2) 掌握mount命令的功能:实现文件系统的挂载.3) ...

  4. YOLO系列:YOLO v3解析

    本文好多内容转载自 https://blog.csdn.net/leviopku/article/details/82660381 yolo_v3 提供替换backbone.要想性能牛叉,backbo ...

  5. Flask特殊装饰器

    @app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...

  6. html概述和html基本结构:

    html概述: HTML是Hyper Text Mark-up Language(超文本标记语言)的首字母简写,超文本是指超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标签组成, ...

  7. 一个ner的bug

    整个机器人代码之前都是好好的,今天启动的时候,就报Initialization failed! 的错误,然后想着其他模块应该没有问题.然后单独运行或者叫测试吧,测试了下 search_eng.py,发 ...

  8. Chrome_调试js出现Uncaught SyntaxError: Unexpected identifier

    转载自:http://blog.csdn.net/yiluoak_47/article/details/7663952 chrome下运行编写的JavaScript代码时,在工具javascript控 ...

  9. poj3190 Stall Reservations(贪心+STL)

    https://vjudge.net/problem/POJ-3190 cin和scanf差这么多么..tle和300ms 思路:先对结构体x升序y升序,再对优先队列重载<,按y升序. 然后依次 ...

  10. hdu1003 Max Sum(最大子串)

    https://vjudge.net/problem/HDU-1003 注意考虑如果全为负的情况,特判. 还有输出格式,最后一个输出不用再空行. #include<iostream> #i ...