参考链接:
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 修改需要修改的内容
**
- 打开egret工程
- 打开scripts/config.ts
- 修改代码(后边给出代码)
- 直接发布web包 / 命令行发布web包
- 此时你会发现 web 不能运行
- 去web包目录下 修改manifest.json 按照config压缩的名称修改
- 注意事项: 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"
]
}