cocosjs_web_打包成多个文件

本文介绍了如何将cocos2d-x 3.10的web项目打包成多个文件,以满足服务器对文件大小的要求。作者通过研究closure-compiler和修改gen_buildxml及build_xml函数,实现了按模块生成多个JS文件并在index.html中逐一引入,最终成功将game.min.js拆分。
摘要由CSDN通过智能技术生成

author:mucjgm

转载请注明出处。


版本:cocos2dx 3.10


需求:由于默认的打包方式打出来的game.min.js文件比较大。服务器方面要求我分成几个文件打包。


研究:

1.首先根据打包命令cocos compile -p web -m release找到打包入口。位于引擎目录下

cocos2d-x-3.10/tools/cocos2d-console/plugins/plugin_compile/project_compile.py

2.在文件中找到web的打包函数。build_web。

3.发现他是用谷歌的closure-compiler打包的。于是去github查看源码。https://github.com/google/closure-compiler

4.wiki显示只支持单文件打包。于是想分成多次compiler。然后在index.html里面多次加载。

5.找到web的关键函数gen_buildxml。位于

cocos2d-x-3.10/tools/cocos2d-console/plugins/plugin_compile/build_web/__init__.py

6.开始修改。我的修改方式是根据根据里面现成的module生成多个js文件。修改后的gen_buildxml函数代码如下。

def gen_buildxml(project_dir, project_json, output_dir, build_opts):
    # get engine dir (not real)
    engineDir = project_json["engineDir"]
    # get real engine dir
    engine_dir = os.path.normpath(os.path.join(project_dir, engineDir))
    # get real publish dir
    publish_dir = output_dir
    # get tools dir
    if getattr(sys, 'frozen', None):
        tools_dir = os.path.realpath(os.path.dirname(sys.executable))
    else:
        tools_dir = os.path.realpath(os.path.dirname(__file__))

    # download the binary files
    compiler_1_6 = os.path.join(tools_dir, "bin", "compiler-1.6.jar")
    compiler_1_7 = os.path.join(tools_dir, "bin", "compiler-1.7.jar")
    if not os.path.exists(compiler_1_6) or not os.path.exists(compiler_1_7):
        download_cmd_path = os.path.join(tools_dir, os.pardir, os.pardir, os.pardir)
        subprocess.call("python %s -f" % (os.path.join(download_cmd_path, "download-bin.py")), shell=True, cwd=download_cmd_path)

    try:
        f = open(os.path.join(engine_dir, "moduleConfig.json"))
        print os.path.join(engine_dir, "moduleConfig.json")
        module_cfg = json.load(f)
    finally:
        f.close()

    ccModuleMap = module_cfg["module"]
    modules = project_json.get("modules", ["core"])
    renderMode = project_json.get("renderMode", 0)
    mainJs = project_json.get("main", "main.js")
    ccJsList = [module_cfg["bootFile"]]
    userJsList = project_json.get("jsList", [])

    if renderMode != 1 and "base4webgl" not in modules:
        modules[0:0] = ["base4webg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值