这两天研究分包,所以顺便作死玩了个新想法,把引擎包放到分包里面去
我也不知道这算不算多此一举,大家看看有没有更好的建议吧,我觉得这样虽然降低了主包的大小,降低了首包的加载速度,但是该加载的还是要加载,没准还会黑屏一段时间,大家仁者见仁智者见智吧,我也只是无意捣鼓出来的
如果有人主包大小空间需要优化,但是又没有其他可优化的空间时,可以试试这个方法
微信小游戏主包大小限制: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被成功运行



