-
Notifications
You must be signed in to change notification settings - Fork 49
教学步骤中,`构建`实际做了什么?
僵尸浩 edited this page Dec 24, 2022
·
2 revisions
在首页中,我明确提到本项目的特点在于“将JS运行在宿主虚拟机而非编译为WASM的虚拟机里”。为了达成这个目标,本项目中的JS加载其实与PuerTS的原有方式不尽相同。
PuerTS的原有方式大概可以理解为这样:
JsEnv.ExecuteModule(xxx) -> ILoader.ReadFile(xxx) -> Execute JS String in V8 -> Get Result.
而在本项目中,加载JS的方式变成了这样:
JsEnv.ExecuteModule(xxx) -> global.JS_RESOURCES[xxx]() or wx.require(xxx) -> Get Result.
可以看出来,Loader在这个过程里没有起到任何作用。调用ExecuteModule时,puer-webgl会将脚本的标识符,直接在全局查找JS(浏览器中)或是调用require(小游戏中)完成脚本执行。并取得结果。
这部分代码在这里
而此处的global.PUERTS_JS_RESOURCES
和wx.require
的目标文件,就需要提前通过构建
创造出来。
项目示例中提供了一个PostProcessor.cs,里面会收集Resources
目录下的所有JS,将它们构建为global.PUERTS_JS_RESOURCES,或者是拷贝至小游戏的puerts_minigame_js_resources目录。这样打包成webgl包后,JS的加载逻辑就能和Puerts.DefaultLoader
的逻辑完全对应。
因此,相应的,你也只需要将你的JS按照一定规律拷贝至小游戏的puerts_minigame_js_resources目录(小游戏中),或是合并为一个PUERTS_JS_RESOURCES对象(浏览器中),让它们能和你的Loader对应上即可。