教你微信小游戏中的 cocos2d-js-min.js 引擎包放到分包里面

这两天研究分包,所以顺便作死玩了个新想法,把引擎包放到分包里面去

我也不知道这算不算多此一举,大家看看有没有更好的建议吧,我觉得这样虽然降低了主包的大小,降低了首包的加载速度,但是该加载的还是要加载,没准还会黑屏一段时间,大家仁者见仁智者见智吧,我也只是无意捣鼓出来的

如果有人主包大小空间需要优化,但是又没有其他可优化的空间时,可以试试这个方法

微信小游戏主包大小限制:4m
分包限制:4m
所有主包+分包一共最大限制8m

环境:
cocos creator: 2.0.9.rc.2
微信开发者工具: v1.02.1902010

裁剪完的引擎至少也有几百K,不裁剪有 1.x M大小

正常打包完的目录:

1.在game.json中添加分包信息

{
    "deviceOrientation": "portrait",
    "networkTimeout": {
        "request": 5000,
        "connectSocket": 5000,
        "uploadFile": 5000,
        "downloadFile": 5000
    },
    "subpackages": [{
        "name": "engine",
        "root": "subpackages/engine/"
    }]
}

2.移动引擎文件到分包目录

创建文件夹 subpackages/engine/
cocos2d-js-min.js 放到 engine 目录并改名为 game.js

3.根目录下修改main.js

require('libs/weapp-adapter/index');
var Parser = require('libs/xmldom/dom-parser');
window.DOMParser = Parser.DOMParser;
require('libs/wx-downloader.js');
require('src/settings');
var settings = window._CCSettings;
require('main');
wx.loadSubpackage({
    name: "engine",
    success: res => {
        // require(settings.debug ? 'cocos2d-js.js' : 'cocos2d-js-min.js');
        require('./libs/engine/index.js');

        // Adjust devicePixelRatio
        cc.view._maxPixelRatio = 3;

        wxDownloader.REMOTE_SERVER_ROOT = "";
        wxDownloader.SUBCONTEXT_ROOT = "";
        var pipeBeforeDownloader = cc.loader.subPackPipe || cc.loader.md5Pipe || cc.loader.assetLoader;
        cc.loader.insertPipeAfter(pipeBeforeDownloader, wxDownloader);

        if (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) {
            var _WECHAT_SUBDOMAIN_DATA = require('src/subdomain.json.js');
            cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
                cc.Pipeline.Downloader.PackDownloader._doPreload("WECHAT_SUBDOMAIN", _WECHAT_SUBDOMAIN_DATA);
            });

            require('./libs/sub-context-adapter');
        }
        else {
            // Release Image objects after uploaded gl texture
            cc.macro.CLEANUP_IMAGE_CACHE = true;
        }

        window.boot();

    },
})

最后运行结果:

最后hello world demo被成功运行

5赞

你咋这么机智呢?

mark一下,顺便问下怎么裁剪

菜单栏→项目→项目设置→模块设置

将没有用到的模块取消勾选就可以了

2赞

秀。。。

机智的大大,给你个大大的赞:+1:

这是肯定会黑屏一会的。

牛,大神,你解决了我一个大问题