花了点时间研究了一下,目前微信开发者工具、wx小游戏安卓真机运行是可以的理论是通的。因为很多人都没有针对这个问题做一些经验分享,避免广大朋友有遇到类似坑,做点小贡献吧。
希望后续有遇到什么问题大家在这里一起讨论分享好了!感激,互助。peace!
首先你要在Laya编译能通过,我一般直接在vscode配置好layaair2-cmd complie和publish发布,需要先修改tsconfig.json让支持async的语法编译通过,关键在于指定tslib的位置,不然找不到,别问为什么,我也不知道为神马!!
{
"compilerOptions": {
"module": "es6",
"target": "es6",
"noEmitHelpers": false,
"sourceMap": true,
"removeComments": true,
"baseUrl": ".",
"paths": {
"tslib": [
"/Applications/LayaAirIDE_beta.app/Contents/Resources/app/node_modules/tslib/tslib.d.ts",
"tslib/tslib.d.ts"
]
},
"lib": [
"esnext",
"dom",
"es2015.promise"
]
}
}
此时就要考虑转es5了,拿微信小游戏来说,wxgame.json配置里面打开es6toes5
"useMinJsLibs": true,
"es6toes5": true,
! 之前修改了publish.js里面es6toes5,这里我又整理下发现如果引用了以下文件:
loadLib("libs/domparserinone.js")
微信开发工具运行时候会提示:Sax0 is not defined之类的,因为wx小游戏不是浏览器没有window的域默认,所以需要改下那个js里面的代码(domparserinone.js有2个地方):
var SaxO={}; window.SaxO=SaxO
var htmlEntity={};
window.htmlEntity = htmlEntity
如果引用了其他的第三方库,记得类似提示也搜索一下处理一下js再编译发布。
FGUI的那个loadLib("libs/rawinflate.js") 记得把最后call(this)改成call(window)。。不然小游戏挂壁
如果正常编译.................
然后这个时候,微信开发者工具运行会爆一个错误跟这个人一样:
https://blog.csdn.net/sinat_33184880/article/details/85533095
按他说的把那个下载我改成:regenerator.runtime.js并且在index.js里面loadLib引用了
//-----libs-begin-----
loadLib("libs/laya.core.js")
loadLib("libs/laya.ani.js")
loadLib("libs/laya.html.js")
loadLib("libs/laya.d3.js")
loadLib("libs/domparserinone.js")
//-----libs-end-------
//------项目自定义添加---------
// regenerator-runtime/runtime.js
loadLib("libs/regenerator.runtime.js")
// fgui
// ! 小游戏发布时候勾选不压缩,这个库不需要,小游戏不支持(发布时候)
// loadLib("libs/rawinflate.js");
loadLib("libs/fairygui.js");
ps: 因为Laya2.7增加了在libs/min的压缩js方便发布时候直接引用加速发布,推荐用terser命令进行压缩min一下丢一个进去.为了懒人,我直接上传了。(有更新,我找了个可用的版本,然后也类似上面修改了window.xxx = xxx兼容小游戏)
目前只是快速简单测试了一下代码是可以的。希望没漏。下面随便Main.ts启动时候执行一下this.testAsync()即可看看效果。
async testAsync() {
await this.testWait10s()
}
async testWait10s() {
return new Promise((resolve,reject)=>{
Laya.timer.once(10000,this,()=>{
console.log("10s后")
resolve()
})
})
}
如果有什么问题,欢迎大家一起来分享感恩。
附件:
regenerator.runtime_.zip