Peacock构建系统完整指南:用esbuild+msgpack将HITMAN替代服务器打包成chunk0

📅 2026/8/22 14:05:31
Peacock构建系统完整指南:用esbuild+msgpack将HITMAN替代服务器打包成chunk0
Peacock构建系统完整指南用esbuildmsgpack将HITMAN替代服务器打包成chunk0【免费下载链接】PeacockThe Peacock Project is a HITMAN™ World of Assassination trilogy server replacement.项目地址: https://gitcode.com/gh_mirrors/pe/PeacockPeacock是一款开源的 HITMAN™ World of Assassination 三部曲服务器替代server replacement项目目标是让游戏在官方服务器之外继续可玩。本文带你快速看懂它最核心的部分构建系统——如何使用 esbuild 打包出单文件chunk0.js如何用msgpack预构建合约与挑战资源最终组装成一个可分发的独立服务器。一、为什么叫 chunk0Peacock 的整个服务器最终只运行一个 JavaScript 文件node chunk0.js这一设计来自 package.json 的启动脚本start:node chunk0.jsoptimize: 用terser对chunk0.js二次压缩混淆单文件产出的好处非常直接优点说明部署简单拷贝一个chunk0.js 资源目录即可运行启动零依赖解析所有 TypeScript 源码在构建期已被 bundle便于校验服务器会计算chunk0.js的 MD5 作为版本摘要见 components/tools.ts 中的chunkDigestchunk0这个名字沿袭自 Hitman 系列游戏资源包的命名习惯chunk0.rpkgPeacock 用它致敬原版游戏结构。二、构建管线总览一条命令串起三个阶段生产构建由 package.json 中的build脚本驱动yarn webui:build node packaging/build.mjs实际执行顺序是三条流水线WebUI 构建webui/ 目录下的 React 管理面板由 Vite 独立打包到webui/dist资源预构建packaging/buildTasks.mjs 中的generateRequireTable()packResources()esbuild 生产打包packaging/build.mjs 把 TypeScript 源码打成chunk0.js所有构建脚本都集中在 packaging/ 目录该目录的 README.md 对每个脚本都有简短说明是阅读构建系统的第一站。三、msgpack 资源预构建把 JSON 变成 .prp Hitman 游戏原生使用msgpack序列化的资源文件.prp/.rpkg。为了让客户端无感地连接 Peacock构建期必须提前把数据资源打包成同样的格式。核心逻辑在 packaging/buildTasks.mjs 的packResources()中输入contractdata/ 目录下数百个 JSON 文件覆盖全部地点的合约、挑战_CHALLENGES.json、精通_MASTERY.json与升级内容ESCALATION 子目录。处理规则️ 清理元数据删除LastUpdate、GameVersion、CreationTimestamp等服务器无关字段 分类落盘*_CHALLENGES.json→resources/challenges/md5.prp*_MASTERY.json→resources/mastery/md5.prp其余合约按elusive隐秘目标与普通合约分为el和b两个数组合并打包成一个resources/contracts.prp 文件命名挑战/精通资源的文件名是原始文件名的 MD5 哈希与游戏客户端的资源寻址方式保持一致序列化使用 msgpackr 的Packr并开启bundleStrings: true选项——相同字符串只存储一次、引用复用对包含大量重复文案的挑战数据压缩收益显著。 除了构建期打包项目还提供 packaging/extractChallengeData.mjs 这类 CLI 工具用于从 IOI 官方服务器抓取最新挑战数据再喂给上面的打包流程——这是内容持续更新的关键环节。另一个预构建函数generateRequireTable()则负责生成 components/generatedPeacockRequireTable.ts它扫描 components/ 下全部 TypeScript 模块自动产出一张peacockproject/core/路径 → 模块的映射表。插件系统正是通过这张表在运行时动态加载核心模块避免手写 import。四、esbuild 生产打包chunk0.js 的诞生 ⚙️packaging/build.mjs 是整个构建系统的心脏关键配置一览配置项值作用entryPointscomponents/cli.ts服务器入口所有模块由此拉入outfilechunk0.js单文件输出platform/targetnode/es2021面向 Node.js 20/22 运行时minifyIdentifierstrue标识符压缩生产环境sourcemapexternal生成独立.map便于调试externalmsgpackr-extract等含原生二进制的包不打包保持运行时加载两个自研 esbuild 插件是亮点1.jsonAsCompressedTextPlugin定义于 build.mjs 内部 拦截所有.json加载请求把 JSON 解析后重新序列化并以textloader 内联——配置文件被当作压缩字符串直接嵌入 chunk0运行时零 IO。2. esbuild-plugin-license.mjs在构建结束时读取 metafile自动汇总所有第三方依赖的许可证声明写入THIRDPARTYNOTICES.txt。这是 AGPL-3.0 开源合规的自动化保障该插件思想源自 Prettier 的构建脚本。五、开发模式不打包直接跑 TS 生产走 bundle开发则走 packaging/devLoader.mjs对应yarn run-dev同样先执行generateRequireTable()和packResources()资源必须预构建通过esbuild-register劫持require让 Node.js 像执行 JS 一样直接加载.ts源码设置PEACOCK_DEV true与DEBUGpeacock开启详细日志这样开发时修改源码立即生效无需等待完整打包——与生产管线的差异只有一处保证了开发即生产的一致性。六、插件构建与二次优化 除了主服务器还有两条辅助管线插件独立打包packaging/buildPlugins.mjs 将plugins/*.plugin.ts逐个 bundle 为独立 JS并把peacockproject/core和所有依赖标记为 external——插件在运行时通过前面生成的 require table 动态获取核心能力实现核心 插件的解耦架构。terser 终压缩yarn optimize对 esbuild 产物再做一轮--toplevel级压缩与命名混淆进一步缩小chunk0.js体积。七、一键发布ciAssemble.sh 组装最终发行包 构建完成后packaging/ciAssemble.sh 负责组装可分发的发行目录从package.json读取版本号创建Peacock-vversion目录可选 Linux 配置运行node chunk0.js noop生成默认options.ini配置拷贝chunk*.js、PeacockPatcher.exe客户端内存补丁程序源码见 patcher/ 与 patcher-darwin/、resources/下预构建的.prp资源、webui/dist管理面板zip -9最高压缩率打包产出可直接分发给玩家安装的最终 zipWindows 用户还可用 packaging/Start Server.cmd 一键启动内置 Node 运行时的服务器。八、从零跑通构建最快上手清单 ✅# 1. 安装依赖需 Node.js 22.x 与 Yarn 4 yarn install # 2. 开发模式运行自动预构建资源 esbuild-register 加载 TS yarn run-dev # 3. 生产构建WebUI 资源预构建 esbuild 打包 yarn build # 4.可选terser 终压缩 yarn optimize总结Peacock 的构建系统是一套教科书级的内容服务器打包方案esbuild负责代码侧TypeScript 源码 内联 JSON 配置 → 单文件chunk0.jsmsgpackr负责数据侧数百个合约 JSON → 游戏原生格式的.prp资源require table 生成连接两侧让插件体系可以动态加载核心模块ciAssemble.sh收口一切一键产出可分发 zip理解这条管线后你就能自己添加合约数据、编写插件甚至参与 Peacock 的核心开发了。【免费下载链接】PeacockThe Peacock Project is a HITMAN™ World of Assassination trilogy server replacement.项目地址: https://gitcode.com/gh_mirrors/pe/Peacock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考