[LayaAirIDE 2.0]Laya2.6、2.7等支持async、await编译经验分享

花了点时间研究了一下,目前微信开发者工具、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()
})
})
}
 


如果有什么问题,欢迎大家一起来分享感恩。


已邀请:

cxx今年十八

赞同来自: Xiiiyue

首先你要在Laya编译能通过,我一般直接在vscode配置好layaair2-cmd complie和publish发布,需要先修改tsconfig.json让支持async的语法编译通过,关键在于指定tslib的位置,不然找不到,别问为什么,我也不知道为神马!!
 
 
 这个步骤可以详细吗

189*****909

赞同来自:

感谢楼主方案测试可行!就是还没有做过发布,请教下楼主发布是否正常?

冰冻糖葫芦

赞同来自:

是指报这个错吗?
semantic error TS2354: [31mThis syntax requires an imported helper but module 'tslib' cannot be found.[39m
at error (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup\dist\rollup.js:9402:30)
at Object.error (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup\dist\rollup.js:15621:24)
at Object.error (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup\dist\rollup.js:16065:38)
at RollupContext.error (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:17187:30)
at lodash_3 (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:24954:23)
at arrayEach (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:532:11)
at forEach (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:9360:14)
at printDiagnostics (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:24927:5)
at Object.transform (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup-plugin-typescript2\dist\rollup-plugin-typescript2.cjs.js:26760:17)
at Promise.resolve.then (E:\project\laya_soil\LayaAirIDE_2.1.1.1\resources\app\node_modules\rollup\dist\rollup.js:15768:25)

zon

赞同来自:

这功能对前端的开发还挺重要的,laya不原生支持下就离谱.

冰冻糖葫芦

赞同来自:

你那个tsconfig.json不全吧 ,顺便需要在本地的node_module里面安装tslib这个库
{
  "compilerOptions": {
    "module": "es6",
    "target": "es6",
    "noEmitHelpers": true,
    "sourceMap": false,
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost",
      "ES2015",
      "ES2015.Promise",
      "ES2015.Generator"
    ]
  }

要回复问题请先

商务合作
商务合作