微信小游戏的分包(Laya引擎)
2020年8月15为止,微信小游戏的代码包总大小规定是最大16M,每个包不超过4M。未来随着5G的普及是否会扩大容量不得而知,但是16M一个小游戏基本也够用,再加上云资源的加载,实际游戏体积还能变得更大。
关于分包Laya官方也有文档,文档地址: 官方文档
这是分包后的样子:总大小9M左右,分成了4个包,这样无论是上传还是真机调试都方便了很多。

准备工作:
更改根目录下的game.json文件,想分几个包你就写几个subpackages,写完你就可以在项目详细里面看到和上图一样的内容了,只不过分包大小都是0KB。
{
"deviceOrientation": "portrait",
"showStatusBar": false,
"networkTimeout": {
"request": 10000,
"connectSocket": 10000,
"uploadFile": 10000,
"downloadFile": 10000
},
"subpackages":[
{
"name":"sub1",
"root":"sub1/"
},
{
"name":"sub2",
"root":"sub2/"
},
{
"name":"sub3",
"root":"sub3/"
}
]
}
搬运主代码:
众所周知bundle.js主代码是在根目录js文件夹下的,现在我们在根目录新建一个sub1文件夹,再在里面新建一个js文件夹,把主代码搬到里面去。官方文档里有将超过4M的代码给分割再装包的教程,我没怎么看懂,而且一般我写不出超过4M的代码。
如果你主代码写得不是很大其实也可以不用分包,只要保证每个包不超过4M就可以了。以下所有的分包都遵循这个原则。

原来的js文件夹下面新建一个main.js文件,用来加载分包。这里的main.js就只是用来加载分包。
mian,js代码内容:
(function () {
'use strict';
let wx=window.wx;
wx.loadSubpackage({
name:'sub1',
success:function(res){
console.log("加载分包1成功!");
},
fail:function(res){
console.log("加载分包1失败!")
}
})
wx.loadSubpackage({
name:'sub2',
success:function(res){
console.log("加载分包2成功!");
},
fail:function(res){
console.log("加载分包2失败!")
}
})
wx.loadSubpackage({
name:'sub3',
success:function(res){
console.log("加载分包3成功!");
},
fail:function(res){
console.log("加载分包3失败!")
}
})
}());
记得修改入口文件index.js里的 loadLib("js/bundle.js"); 为 loadLib("js/main.js");
搬运引擎代码:
根目录libs是引擎的源代码,基本会占到2M以上的空间,将这个文件夹分包可以节省一半左右的空间。
依然是再分包1里新建了一个libs文件夹,将代码搬运进去

因为这是引擎需要的库所以需要引入
game.js:
window.loadLib = require;
require("index.js");
index.js:
/**
* 设置LayaNative屏幕方向,可设置以下值
* landscape 横屏
* portrait 竖屏
* sensor_landscape 横屏(双方向)
* sensor_portrait 竖屏(双方向)
*/
window.screenOrientation = "sensor_landscape";
loadLib("libs/laya.core.js")
loadLib("libs/laya.physics.js")
loadLib("libs/laya.html.js")
loadLib("libs/laya.ui.js")
loadLib("libs/laya.ani.js")
loadLib("js/bundle.js");
这里的意思是将原本根目录下的index.js的功能交给了分包里的index.js,所以还要注释掉根目录下index.js的loadLib,你搬运了多少就注释掉多少就行了。
图集的分包:
众所周知根目录下的res文件夹是放laya给我们制作好的图集的地方,同时这个文件夹也是占用空间大户,很多小游戏超出4M都是因为图片太多太大了,因此搬运这个文件夹很有必要。同样也是搬到分包里面,但是还需要更改根目录下的fileconfig.json,不然加载不出来。把原来的res/ 替换成sub1/res/就行了。

全文完。
这里只介绍了把东西分到sub1这个包里,其他两个包我用来放骨骼动画之类的东西,还要回去改代码里的路径,反正灵活运用吧,不知道你看完有没有看懂,反正我就是因为看不懂别人的才把自己的想法写出来的。。。