Skip to content

教学步骤中,`构建`实际做了什么?

僵尸浩 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_RESOURCESwx.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对应上即可。