收藏
评论

白鹭引擎分离插件使用说明

白鹭引擎分离插件使用说明


一. 什么是引擎分离插件

我们发布微信小游戏的时候,里面会带有 `egret.min.js` `eui.min.js` 之类的库文件。玩家每次打开一个小游戏,都要重复的下载这些文件。

现在我们把白鹭引擎做成了微信的插件, 5.2.x 系列的所有版本都上传到了微信服务器上。开发者只要在项目里进行了配置,就可以使用远端的插件,不使用本地的引擎文件。

这样的好处是什么呢?如果一个玩家玩了 A 游戏,里面使用了 5.2.20 版本的引擎插件。然后他又玩了 B 游戏,如果 B 游戏的引擎插件版本和 A 游戏一致,那么这个插件就不需要重新下载。如果版本不一致,会通过增量的方式快速下载。这样就可以提高游戏的打开速度,获得更好的用户体验。

二. 小游戏项目结构说明



1. 在之前的微信小游戏项目里,我们会把所有的引擎文件和游戏逻辑文件都放在 `js` 文件夹内。

2. 在新的项目结构里,增加了一个 `egret-library` 文件夹。

    - `egret-library`: 放的是引擎库文件

    - `js`: 放的是项目里的其他 `js` 文件,比如游戏逻辑文件 `main.min.js`

3. 微信开发者工具打包上传的时候,会自动生成两个包。

    - 带 `egret-library` 文件夹的包:不支持插件功能的老版本微信,会调用这个文件夹内的引擎文件。

    - 不带 `egret-library` 文件夹的包:支持插件功能的新版本微信会读取这个包,直接调用微信服务器上的引擎插件

三. 使用方法


目前该功能还未正式对外发布,想提前体验需要下载测试版引擎,解压后把引擎文件夹拖动到 EgretLauncher 里。

该测试版引擎的版本号为 5.2.22,使用该版本创建的微信小游戏项目,在发布成release 版本后(`egret publisb --target wxgame`),自动开启插件功能。debug 调试版 (`egret build --target wxgame`),不支持该功能。

如果您的项目因为某种原因不能升级,必须使用某个特定版本的引擎,例如 `5.2.16`,那么可以做如下修改:

1. 在项目根目录的 `egretProperties.json` 里,把 `compilerVersion` 编译器版本改成 5.2.22。这样的话引擎代码还是 `5.2.16` 的,但是编译脚本使用最新的,这样就能支持把游戏发布成开启微信插件的形式了。


2. 用最新版引擎创建一个新项目,把这3个文件拷贝到老项目里。


注意:其中的 `wxgame.ts` 里会对 `js` 文件做一定的修改,一定要使用我们提供的方法,不要对这块做任何的修改。因为微信会对 `js` 文件做 MD5 校验,任何修改都会改变 MD5 值。

四.FAQ

* 问:引擎插件里都包含哪些库?

* 答:包含白鹭引擎官方提供的 7 个库,注意:只包含发布版的 `xx.min.js`, 不包含调试版的`xx.js`。具体的文件列表如下:

```

egret.min.js

eui.min.js

assetsmanager.min.js

dragonBones.min.js

game.min.js

socket.min.js

tween.min.js

```

-----

* 问:如果为了让包体小一些,不考虑兼容老版本微信的玩家,只使用远程插件里的引擎。是否可以不在小游戏项目里放一份引擎,这样可以吗?

* 答:理论上是可以的,但是微信官方不建议这么做。另外如果使用引擎插件功能,包的总大小会算上线上插件里的引擎代码,所以您自己衡量是否值得。

-----

* 问:我对引擎做了修改,还可以使用远程插件吗

* 答:不能做任何修改,而且必须用官方提供的编译配置文件 `script/wxgame/wxgame.ts`里的默认参数发布 。因为微信会校验本地和插件里 js 文件的 MD5 值,只要做了任何一点修改, MD5 值就会不一致,那么微信会调用本地的这个 js 版本,不会使用远程插件里的。

-----

* 问:我要是不想使用插件功能,应该怎么关闭呢?

* 答:

1. 修改 `scripts/config.wxgame.ts` 把 `useWxPlugin` 改为 `false`


2. 修改 `scripts/wxgame/wxgame.ts` 把 `useWxPlugin` 改为 `false`


3. 修改微信小游戏项目里的 `game.json`,把下面这段内容删掉


-----


最后一次编辑于  07-31  (未经腾讯允许,不得转载)
复制链接收藏赞 0

3 个评论

  • Front
    Front
    07-30


    新建的项目 版本是5.2.22  打包到微信开发者工具  进入不了游戏

    appid也已经申请成功

    麻烦官方看下这种情况是打包失败还是调用md5文件失败

    07-30
    赞同
    回复 2
    • 北京白鹭时代信息技术有限公司
      北京白鹭时代信息技术有限公司
      07-30
      for (let i in engineJS) {
                  let name = engineJS[i] + '.min.js'
                  if (this.md5Obj[name]) {
                      let jsInfo: any = {
                          "path": name,
                          "md5": this.md5Obj[name]
                      }
                      signatureData.signature.push(jsInfo)
                  }
              }
              this.writeData(signatureData, path.join(libDir, "signature.json"))
              fs.writeFileSync(path.join(libDir, "index.js"), null);//-------增加这一行------

      在script/wxgame/wxgame.ts 里,增加一行代码,需要创建一个空的 index.js 文件。之前没发现这个问题,多谢反馈!

      07-30
      回复
    • 苇诺
      苇诺
      09-06
      请问为什么我用上面提供的最新引擎还是有同样的错误啊
      09-06
      回复