e-packager 用后整理:把易语言 .e 项目放进 Git 和 AI 工作流

文章目录(快捷跳转)

简介说明
e-packager 解决的是易语言项目长期以来的一个现实问题:.e 是二进制工程文件,Git 只能看出“文件变了”,看不到改了什么;想用普通编辑器或 AI 改代码,也没有自然的入口。它的做法是把 .e 解包成可读目录,改完再回包成 .e,项目于是就能按普通文本工程来管。

项目自我定位是实验项目,面向的是愿意折腾一下、想给易语言工程补上版本管理和 Diff 能力的开发者。用下来最直接的收益是:源码文件变成 .txt,窗口定义变成 .xml,提交前能看清 Diff,AI 也有东西可读可改。
三条主命令

# 解包:.e → 可读目录\ne-packager unpack MyApp.e MyApp\\n\n# 回包:目录 → .e\ne-packager pack MyApp\ MyApp.e\n\n# 直接编译:.e → .exe(无需打开 IDE)\ne-packager compile MyApp.e MyApp.exe

前两条是日常主路径,第三条是试验性功能,后面单独说。
解包与回包
解包后目录里有几块值得知道:src/ 放源码 .txt 和窗口 .xml;project/ 是封包所需元数据,.e 解包后还可能有原生快照,不能删;ecom/ 是已解包的易模块工作区;image/、audio/、text/ 分别放图片、音频和长文本常量,各自带 list.json 索引;tool/e-packager.exe 默认随目录带一份封包工具;AGENTS.md 是给 AI Agent 看的项目结构说明。

回包有两个容易踩的点。一是程序页里的文本按 IDE 原文保存,路径反斜杠是普通字符,多行文本里的换行也是内容,不要对整个文件盲目替换换行符。二是同名支持库调用显示为裸名称,调用限定信息保存在 project/.call_bindings.json,这个文件要跟源码一起提交;新增、复制或移动调用后如果无法唯一对应,会报 unmatched_call_binding 或 ambiguous_call_binding,这时用「支持库文件名::命令名 (...)」显式指定,比如 krnln::取运行目录 ()。

长文本常量的完整值在 text/ 下,常量页只显示长度,改名要同步改索引里的 name 和源码引用。未修改的 .ec 拆包目录可以回包为字节一致的原始 .ec;但改过源码或资源后,应回包为 .e 再用易语言编译成模块,工具不会把 .e 数据写进 .ec。

常用选项还包括 --main-only 快速解包、--no-tool-output 不复制封包工具、--password 处理带密码文件,以及仅 Win32 版可用的 decrypt-fne 导出支持库公开接口。把 .e / .ec 直接拖到 exe 上也能解包;在工作区根目录直接运行 e-packager 会输出到 pack/。
回包前预检与权威编译检查
validate 分三档,默认 semantic。editable 检查目录、声明和流程结构并实际构造回包字节,允许部分源码错误以警告保留;semantic 只做静态检查,严格查语法、符号、调用签名和可确定类型,不构造回包字节;compile 则在可编辑回包后通过 AutoLinker 调真实 IDE 编译。三档不是逐级叠加:compile 走的是「editable → IDE 实际编译」,不要求先过 semantic。

需要说清楚的是,editable 通过只表示能生成回包字节,不代表 IDE 能打开,更不代表能编译;semantic 通过同理。JSON 里的 rebuildVerified=true 只说明回包构造成功,ideOpenVerified=false 表示没有独立验证 IDE 打开。脚本集成用 --diagnostics json,退出码 0 / 1 / 2 分别对应 passed、failed、unavailable。

如果要对交付物有把握,用真实 IDE 加 AutoLinker 做编译检查:

# 对已有 .e 文件检查\ne-packager compile-check MyApp.e\n\n# 回包时同时检查\ne-packager pack MyApp\ MyApp.e --compile-check\n\n# 显式指定 IDE 路径(IDE 的 lib 目录需启用 AutoLinker.fne)\ne-packager compile-check MyApp.e \\n --eide "C:\path\to\IDE.exe"

编译失败会输出 IDE 页面、行号和错误内容,且不会覆盖已有文件,这一点对交付前检查很实用。
update:增删依赖与资源
依赖的易模块或支持库变了,或者要加图片、音频,用 update 刷新派生内容。加图片是 --add-image D:\res\logo.png,代码里写 #logo;要指定常量名就用 启动画面=D:\res\splash.bin 这种写法。删除用 --remove-ecom、--remove-elib、--remove-image、--remove-audio,删除选择器必须唯一匹配,找不到或有歧义会报错,参数验证失败不会写回工作区。

删除依赖只刷新 ecom/、elib/ 派生内容,不会删原始 .ec 或支持库文件;源码里对已删项的引用需要自己改,可以用 validate <目录> --level semantic 检查。增删都会让旧原生字节快照失效,后续封包按语义重建。
试验性的无 IDE 编译
compile 命令能在不打开 IDE 的情况下把 .e 编成 .exe 或 .dll,支持 --arch x64 和 --subsystem windows。但项目自己标明了这是实验性功能,不保证稳定性或与 IDE 的兼容性,也不建议作为其它检查失败后的自动替代。它需要完整的 VC/MSVC 工具链和 Windows SDK;缺失时会询问是否自动下载安装 VS2026 Build Tools,只装 VC x86/x64 工具与 Windows SDK,默认选 N,安装需要联网且可能请求管理员权限。CI 里应当预装依赖并关闭标准输入。

编译模式有 semantic(默认,支持 x86/x64,推荐)和 legacy-blackmoon(仅 x86,用于和旧编译产物保持逐字节一致)。实测尺寸方面,空白控制台工程 x86 约 114 KB,1606 行、137 个命令的完整测试工程 x86 约 675 KB、x64 约 777 KB,纯代码 GUI 约 173 KB。

semantic 编译还支持通过 project/executable.json 配置图标、文件说明、产品名、公司名和版本等属性,但这份配置只用于直接编译,不写回 .e,也不提供数字签名。legacy-blackmoon 不读取该配置。
优点与局限
优点很实在:源码变成文本后,Git 提交能看清改动,Diff 可用,AI 辅助编辑有了自然的入口;拖拽解包、目录内直接回包降低了日常操作成本;validate 分档和 compile-check 把「能回包」「能编译」两件事分开,避免把静态检查通过误当成编译成功。

局限也得承认。这是实验项目,无 IDE 编译明确不保证稳定性和与 IDE 的兼容性;回包依赖 IDE 和 AutoLinker 时仍有环境要求;调用绑定、长文本常量、原生快照这些机制需要使用者理解,否则容易在回包时卡住;作者也提示使用前备份源文件,不对可能的数据损失负责。遇到解不开或回不去的文件,可以提 Issue 并附上文件。

其他实用命令

# 自动更新到最新版本\ne-packager /update\n\n# 查看当前版本\ne-packager version\n\n# 比较原文件与目录内容是否一致\ne-packager compare-bundle MyApp.e MyApp\\n\n# 往返验证(解包后立即回包并校验)\ne-packager verify-roundtrip MyApp.e temp\ verified.e

排查问题时,e-packager.log 会记录易语言安装目录的探测来源、支持库候选路径和实际加载路径、未解码命令(如 _Lib0Cmd203)的原因,以及解包各阶段的耗时;窗口控件属性由 x86 辅助进程处理,x64 发布包需要携带同次构建的 e-packager-x86.exe。易语言安装目录可以用通用的 --e-dir 指定,目录必须同时包含 lib/、static_lib/、ecom/ 三个子目录。

下载地址

https://github.com/aiqinxuancai/e-packager

https://pan.baidu.com/s/13m-PZK_7AgB8Rd6M6-2c4w?pwd=gbsg 提取码: gbsg

https://pan.quark.cn/s/01a2d259fb1a

未经允许不得转载:网站源码、软件资源与技术教程分享 - 今夕资源网 » e-packager 用后整理:把易语言 .e 项目放进 Git 和 AI 工作流
扫码在手机上阅读本页
赞(0)

评论抢沙发

评论前必须登录!