egret 加载优化尝试- web包 UglifyPlugin 压缩整合js (附测试代码)

参考链接:
https://my.oschina.net/u/3695009/blog/1928093

原文描述

Plugin压缩代码

在微信开发者工具可以看到,js文件夹中5个库文件和一个`main.js`。

现在需求是是要把库文件压缩到一个文件`lib.min.js`中。

回到EgretWing,编辑sctipts下的config.wxgame.ts:
 

//***其他代码***
//

if (command == 'build') {
    return {
        outputDir,
        commands: [
            // 清理js,resource文件夹
            new CleanPlugin({ matchers: ["js", "resource"] }),
            new CompilePlugin({ libraryType: "debug", defines: { DEBUG: true, RELEASE: false } }),
            new ExmlPlugin('commonjs'), // 非 EUI 项目关闭此设置
            new WxgamePlugin(),

            //  压缩插件
            new UglifyPlugin([
                {  
                    // 需要被压缩的文件
                    sources: [
                        "libs/modules/egret/egret.js",
                        "libs/modules/eui/eui.js",
                        "libs/modules/assetsmanager/assetsmanager.js",
                        "libs/modules/tween/tween.js",
                    ],
                    // 压缩后的文件
                    target: "lib.min.js"
                }
            ]),

            new ManifestPlugin({ output: 'manifest.js' })
        ]
    }
    }

//
// ***其他代码**

web扩展
实际开发中 不一定是微信工程
在微信工程可以压缩js代码, 没理由直接打出来的web不能用

**

egret 修改需要修改的内容

**

  1. 打开egret工程
  2. 打开scripts/config.ts
  3. 修改代码(后边给出代码)
  4. 直接发布web包 / 命令行发布web包
  5. 此时你会发现 web 不能运行
  6. 去web包目录下 修改manifest.json 按照config压缩的名称修改
  7. 注意事项: egret 代码有依赖关系 自行注意

附代码
config.ts

/// 阅读 api.d.ts 查看文档
// tslint:disable-next-line: no-reference
///<reference path="api.d.ts"/>

import { CompilePlugin, EmitResConfigFilePlugin, ExmlPlugin, IncrementCompilePlugin, ManifestPlugin, RenamePlugin, TextureMergerPlugin, UglifyPlugin } from "built-in";
import * as path from "path";
import { CustomPlugin } from "./myplugin";

const config: ResourceManagerConfig = {


    buildConfig: (params) => {

        const { target, command, projectName, version } = params;

        if (command == "build") {
            const outputDir = ".";
            return {
                outputDir,
                commands: [
                    // new EmitResConfigFilePlugin({
                    //     output: "resource/default.res.json",
                    //     typeSelector: config.typeSelector,
                    //     nameSelector: p => path.basename(p).replace(/\./gi, "_"),
                    //     groupSelector: p => "preload"
                    // }),
                    new ExmlPlugin("debug"), // 非 EUI 项目关闭此设置
                    new IncrementCompilePlugin(),
                ],
            };
        } else if (command == "publish") {
            const outputDir = `bin-release/web/${version}`;
            return {
                outputDir,
                commands: [
                    new CustomPlugin(),
                    new CompilePlugin({ libraryType: "release", defines: { DEBUG: false, RELEASE: true } }),
                    new ExmlPlugin("commonjs"), // 非 EUI 项目关闭此设置
                    new UglifyPlugin([

                        {    
                            // 需要被压缩的文件
                            sources: [
                                "libs/modules/egret/egret.min.js",
                                "libs/modules/egret/egret.web.min.js",
                                "libs/modules/assetsmanager/assetsmanager.min.js",
                                "libs/modules/tween/tween.min.js",
                                "libs/modules/game/game.min.js",
                                "libs/modules/promise/promise.min.js"
                            ],
                            // 压缩后的文件
                            target: "lib.min.js"
                        },
                        {    
                            // 需要被压缩的文件
                            sources: [
                                "libs/modules/eui/eui.min.js",
                                "libs/modules/dragonBones/dragonBones.min.js",
                                "libs/modules/socket/socket.min.js",
                                "libs/htsw_framework/htsw_framework.min.js",
                                "libs/CoursewareModule/CoursewareModule.min.js"
                            ],
                            // 压缩后的文件
                            target: "lib_htsw.min.js"
                        },
                        {
                            sources: ["main.js"],
                            target: "main.min.js",
                        }
                    ]),
                    new RenamePlugin({
                        verbose: true, hash: "crc32", matchers: [
                            { from: "**/*.js", to: "[path][name]_[hash].[ext]" },
                        ],
                    }),
                    new ManifestPlugin({ output: "manifest.json" }),
                ],
            };
        } else {
            throw new Error(`unknown command : ${params.command}`);
        }
    },
    // tslint:disable-next-line: no-shadowed-variable
    mergeSelector: (path) => {
        if (path.indexOf("assets/bitmap/") >= 0) {
            return "assets/bitmap/sheet.sheet";
        } else if (path.indexOf("armature") >= 0 && path.indexOf(".json") >= 0) {
            return "assets/armature/1.zip";
        }
    },

    // tslint:disable-next-line: no-shadowed-variable
    typeSelector: (path) => {
        const ext = path.substr(path.lastIndexOf(".") + 1);
        const typeMap = {
            jpg: "image",
            png: "image",
            webp: "image",
            json: "json",
            fnt: "font",
            pvr: "pvr",
            mp3: "sound",
            zip: "zip",
            sheet: "sheet",
            exml: "text",
        };
        let type = typeMap[ext];
        if (type == "json") {
            if (path.indexOf("sheet") >= 0) {
                type = "sheet";
            } else if (path.indexOf("movieclip") >= 0) {
                type = "movieclip";
            }
        }
        return type;
    },
};


export = config;

附代码(压缩完 libs 在game里 需要移动到 initial 里)
manifest.json

{
	"initial": [
		"js/lib.min_ed36a3a4.js",
		"js/lib_htsw.min_b9f8cd39.js"
	],
	"game": [
		"js/TwoClass_StoneBusinessman.thm_e688476d.js",
		"js/default.thm_fb85d5ca.js",
		"js/main.min_d944a042.js"
	]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值