生效文件只有 4 个
代码在
ps-plugin/quick-export/src/。根目录的 index.js 只是防御性占位,本插件是 JS 注入型,没有入口 HTML。| 文件 | 体积 | 职责 |
|---|---|---|
src/index.js | 4.2K | 注册面板、注入 CSS/HTML、调 init |
src/panel_html.js | 25K | 面板 HTML 字符串 |
src/main_bundled.js | 135K / ~3100 行 | 全部业务逻辑 + UI 绑定 |
src/style.css | 33.6K | 样式 |
注意:
ps-plugin/quick-export/ 是 git submodule(独立仓库 XH-20-22/quick-export)。改完要推两次:先推子仓库,再推父仓库。开发流程
cd ps-plugin/quick-export npm run check # 护栏:入口链/manifest/语法/版本号/UXP兼容/git健康度 npm test # 4 个业务单测(51 断言) npm run verify # check + test(改完必跑) npm run version:sync -- patch # 补丁号+1 并同步到 5 处 # 无需 npm install(零依赖) # 重载:UXP Developer Tool 点 Reload # 改了 manifest.json 必须 Unload → Load(Reload 会跑 require 缓存的旧代码)
权威文档:
quick-export/AGENTS.md —— 读完它 + manifest.json 即可还原 90% 项目现状,无需逆向 3100 行代码。UXP 硬性约束(违反必踩坑)
| 约束 | 注释 |
|---|---|
只能 require,禁止 eval/new Function | 对 main_bundled.js 求值会直接崩 PS。只有 panel_html.js(纯字符串、无 UXP 调用)可以安全求值。 |
| 禁止 bare specifier import | import x from 'photoshop' 会静默失败,必须用 require('photoshop')。 |
不全量读 main_bundled.js | 135K ≈ 4 万 token。先 grep 函数名定位行号,只读该函数上下 30 行。 |
| z-index 盖不住 input | 有文字编辑能力的 input 永远渲染在最上层,这是 UXP 平台铁律。菜单遮挡只能靠 visibility:hidden 临时隐藏。 |
不用 flex gap | UXP 支持不稳,用 margin 替代。style.css 里还有 26 处待换。 |
el.x 必须守卫 | 可能为 undefined,直接用会抛错。 |
| PS 处于 modal 时 Load 会超时 | 测试前先关掉 PS 的模态对话框,否则以为插件坏了。 |
saveAs 是 document 实例属性 | 不是 app 的。写法 dupDoc.saveAs.png(fileEntry, opts, true)——首参永远是 file entry。 |
dialogOptions 只能 "dontDisplay" | dontDisplayDialogs 是 ExtendScript 的,UXP 不认。 |
| modal 不要嵌套 | batchPlay 已在 executeAsModal 内时,不要再传 modalBehavior。 |
不支持 backdrop-filter | 磨砂玻璃效果做不出来,别试。 |
localStorage 可能不可用 | 需 fallback。 |
排版规范(改 UI 必守)
| 项 | 数值 |
|---|---|
| 框高 | 22px |
| 功能文字 | 12px |
| 默认行距 | 5px |
| 行距 10px 的特例 | 保存模式横向行 / 合并保存↔包含隐藏层 / 包含隐藏层↔导出蒙版 / 格式选项行 |
| 格式下拉 | 占行宽 50%,位深填右半区 |
小下拉 .qe-picker-sm | min-width 108px |
| 点位按钮 | 不写死高度,用 stretch 随输入框实际渲染高度对齐(Windows 的 input 实际略超 22px) |
| 弹层 | 行高 22px、左缘对齐输入框、允许溢出 |
分辨率(resolution)是 DPI 密度,不是像素尺寸:用于纸张预设反算宽高 + 导出时写 DPI。切换单位不改变像素尺寸是正确行为;切换时数值不自动换算(300ppi ≠ 300ppcm)是已知 UX 欠账。
协作法则
- 先对齐验收标准再动手——一句话需求先追问出可验收的具体标准
- UI 类需求要参考图——纯文字描述 UI 极易歧义
- 换技术方案前先 spike——30 秒小验证,别做完才发现方向错。历史上自绘下拉框浪费了 15 个版本
- 不读
docs/archive/——历史规格,读了会被误导 - 每轮提交保护点——曾发生
style.css改动被 IDE 撤销卡片回退的事故 - 格式/enum 疑难别猜——直接连 PS 跑
executeAction循环测多个 enum key,比查文档快 10 倍