从任意已安装的 Electron应用(`.asar` 包)中提取资源和 JavaScript,能够在有 `.js.map` 文件时恢复原始源码,或在无映射时恢复格式化代码。
Electron App 提取是一项面向实际任务的技能,主要用于从一个安装的 Electron App 的 app. asar 提取资源和代码;当 .js.map 存在时, 从嵌入源 Content 恢复原始源文件。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
从已安装的 Electron 应用的 app.asar 中提取资源与代码。若存在 .js.map 文件,则通过其中嵌入的 sourcesContent 还原原始源文件;否则使用 Prettier 格式化混淆后的代码。Source-map 中的路径优先相对于 .js.map 文件所在位置解析,因此类似 ../../src/main.ts 的打包路径将还原为可读路径(如 restored/src/main.ts),而非哈希占位符。始终跳过 node_modules。支持 macOS 和 Windows 平台。
当本技能向用户发起提示时,请按以下工具选择规则执行(优先级由高到低):
AskUserQuestion、request_user_input、clarify、ask_user 或其等效实现。下方出现的具体 AskUserQuestion 引用仅为示例 — 在其他运行时中请替换为本地等效工具。
脚本位于 scripts/ 子目录下。{baseDir} 表示本 SKILL.md 文件所在目录路径。解析 ${BUN_X} 运行时:若系统已安装 bun → 使用 bun;若未安装但可用 npx → 使用 npx -y bun;否则建议用户安装 bun。请将 {baseDir} 和 ${BUN_X} 替换为实际值。
| 脚本 | 用途 |
|---|---|
scripts/main.ts |
应用发现 + asar 提取 + source-map 还原 + Prettier 格式化 |
当用户希望查看已安装 Electron 应用内部结构或检查其打包后的代码时,应使用本技能。触发语句包括:
接受两种输入形式:应用名称(例如 Codex)或绝对路径(例如 /Applications/Codex.app、一个 .asar 文件,或 Windows 安装目录)。脚本在两个平台上均支持自动发现。
1. 确定输入。 若用户未提供应用名称或路径,则需主动询问;若用户希望自定义输出目录,也应一并询问。
2. 执行脚本。
${BUN_X} {baseDir}/scripts/main.ts "" [--output ] [--asar ] [--force]
若不确定自动发现是否能准确定位目标 bundle,建议先使用 --dry-run 参数运行 —— 此时仅打印解析出的路径并退出,不修改任何文件系统内容。
3. 处理结果。
AskUserQuestion(或运行时等效工具)询问其选择;随后使用所选绝对路径重新运行。--force 时将拒绝写入。请询问用户是否覆盖(启用 --force)或另选 --output 路径。--asar /full/path/to/app.asar。4. 引导用户查看结果。 默认输出目录为 ~/Downloads/。最值得关注的子目录取决于实际发现的内容:
restored/ → 表明已基于 .js.map 文件重建原始源码树;这是首要查阅位置。extracted/(无 source-map)→ extracted/ 中的 JS/CSS 已就地完成 Prettier 格式化;请从此处阅读。脚本应在 source-map 允许范围内尽可能保留原始源文件名与目录结构:
sourceRoot 存在,则先以其为基础解析 sources[] 中每一项,再相对于 .js.map 文件在 extracted/ 内的实际路径进行补全。.vite/main/index.js.map + ../../src/main.ts → restored/src/main.ts。extracted/ 目录层级,则保留其可读的剩余路径部分,并置于 restored/ 下,而非哈希化。例如:.vite/main/index.js.map + ../../../shared/src/lib/foo.ts → restored/shared/src/lib/foo.ts。webpack://、file:// 及 ?loader 后缀。restored/__unknown/. 。node_modules 和 webpack/runtime/* 条目;这些属于打包器/运行时噪声,而非应用源码。# 按应用名称提取(默认输出至 ~/Downloads/Codex-electron-extract/)
${BUN_X} {baseDir}/scripts/main.ts Codex
# 按绝对路径提取(适用于 .app 包、安装目录或 .asar 文件)
${BUN_X} {baseDir}/scripts/main.ts "/Applications/Visual Studio Code.app"
${BUN_X} {baseDir}/scripts/main.ts "C:\\Users\\you\\AppData\\Local\\Programs\\codex"
${BUN_X} {baseDir}/scripts/main.ts --asar /Applications/Codex.app/Contents/Resources/app.asar Codex
# 自定义输出目录
${BUN_X} {baseDir}/scripts/main.ts Codex --output ~/work/codex-source
# 预览自动发现结果(不执行任何写入操作)
${BUN_X} {baseDir}/scripts/main.ts Codex --dry-run
# 覆盖已存在的输出目录
${BUN_X} {baseDir}/scripts/main.ts Codex --force
# 输出机器可读结果(标准输出为单行 JSON)
${BUN_X} {baseDir}/scripts/main.ts Codex --json
| 选项 | 简写 | 说明 | 默认值 |
|---|---|---|---|
|
应用名称或绝对路径。除非指定了 --asar,否则此项为必填。 |
— | |
--output |
-o |
输出目录 | ~/Downloads/ |
--asar |
覆盖自动解析出的 .asar 路径 |
自动发现 | |
--force |
-f |
允许向已存在且非空的输出目录写入 | false |
--skip-format |
跳过 Prettier 格式化 | false | |
--skip-restore |
跳过 source-map 还原 | false | |
--no-unpacked |
不复制 app.asar.unpacked/ 目录 |
false | |
--dry-run |
打印解析出的路径后退出,不执行任何写入操作 | false | |
--json |
在标准输出中输出一行 JSON 摘要(禁用常规输出) | false |
~/Downloads/-electron-extract/ ├── extract-report.json # JSON 摘要:统计数量、警告信息、已解析路径 ├── extracted/ # asar 原始内容(无 source-map 时对 JS/CSS 就地执行 Prettier 格式化) │ └── ... # node_modules 保持原样(格式化阶段跳过) ├── extracted.unpacked/ # 若存在则从 .unpacked/ 复制而来 │ └── ... # 原生模块(.node)、大型资源文件 └── restored/ # 仅当至少有一个可用的 .js.map 时才存在 └── # 依据各 .js.map 中的 sourcesContent 重建
.js.map 中嵌入了 sourcesContent 时生效。现代打包器(如 webpack、esbuild、Vite、rollup)通常默认启用此功能。若 source-map 仅引用外部 .ts/.js 文件而未嵌入其内容,则该 map 将被跳过,对应 .js 文件将转为 Prettier 格式化。被跳过的 maps 将记录于 extract-report.json 的 warnings 字段中。../ 段视为天然不安全。应首先从 map 文件位置解析完整路径,再对最终输出路径做清理,确保其仍处于 restored/ 下层。哈希回退机制仅用于无法解析为合法文件路径的源名称。/Applications 和 ~/Applications;Windows 上搜索 %LOCALAPPDATA%\\Programs、%PROGRAMFILES%、%PROGRAMFILES(X86)%、%APPDATA%。若发现多个匹配项,脚本将退出并列出全部候选 —— 用户需重新运行并指定绝对路径。Linux 或其他平台不支持自动发现,须显式传入 --asar /path/to/app.asar。/、用户主目录(直接)或当前工作目录写入;亦禁止向已存在且非空的输出目录写入,除非启用 --force。@electron/asar 和 prettier 通过 npx -y 动态解析。首次运行因需缓存依赖而较慢。相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 133.9万人学习
共49课时 | 82.5万人学习