项目升级到Egret5.0,同时也把Egret的引擎工具更换为EgretLauncher,结果出现问题,原来跑得好好Jenkins,突然无法进行编译了。(以前4.0的时候是好好的)。花费了一些功夫,追踪了Egret引擎的相关编译,最终才找到解决办法。现在把这些给记录下来,主要也是方便自己升级或者降级引擎时可以查看。
直接查看编译错误信息,发现了下面的错误信息
C:\Program Files (x86)\Jenkins\workspace\pal_dev>C:\Users\sodaChen\AppData\Roaming\npm\egret.cmd clean
C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:86
var isUsingDefault = requestVersion == defaultVersion.version;
^
TypeError: Cannot read property 'version' of null
at entry (C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:86:62)
at Object.<anonymous> (C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:360:1)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.runMain (module.js:575:10)
at run (bootstrap_node.js:352:7)
at startup (bootstrap_node.js:144:9)
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE
既然有代码报错,那么就追踪相关的代码,从
C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js
这个js文件开始追踪。发现这段代码获取egret系统路径有问题
function getAppDataPath() {
switch (process.platform) {
case 'win32': return process.env['APPDATA'] || path.join(process.env['USERPROFILE'], 'AppData', 'Roaming');
case 'darwin': return path.join(os.homedir(), 'Library', 'Application Support');
case 'linux': return process.env['XDG_CONFIG_HOME'] || path.join(os.homedir(), '.config');
default: throw new Error('Platform not supported');
}
}
跟我们在cmd下面输入egret build获取的引擎配置路径不一样。最终发现是引擎的位置读取错了。最终发现是引擎的位置读取错了。读成这样了:
C:\Windows\system32\config\systemprofile\AppData\Roaming\Egret\engine。
实际引擎的路径是
C:\Users\sodaChen\AppData\Roaming\Egret\engine
怀疑是Jenkins里面有改变环境变量(也有可能是白鹭自己设置环境变量有问题,没去深入研究)
解决方法是在EgretLauncher的安装路径下修改这个js文件
C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\egret.js
强制把enginePath这个变量设置为自己的引起路径
enginePath = "C:\\Users\\linlong\\AppData\\Roaming\\Egret\\engine\\"
它会读取这个配置文件config.json,然后这个配置文件有记录你的使用的引擎版本号
如果你有修改自定义引擎位置,那么记得维护这个配置文件
比方说我的最新配置:
C:\Program Files (x86)\Jenkins\workspace\egret-core
最终可以正常编译了,有个麻烦的地方就每次升级egret必须再次egret.js文件。