BHGL / DCCTools / PS Quick Export
🏠 BHGL 主页 | DCCTools 追踪台

Photoshop Quick Export · 开发注意事项

UXP 插件:把「隐藏图层 → 另存为 → 命名 → 选格式」压缩成一键导出 | 无构建链,改完 reload 即生效
版本
v0.9.67
插件 ID
com.tooler.quickexport
宿主要求
PS 23.3+ (2022)
主文件
135KB

生效文件只有 4 个

代码在 ps-plugin/quick-export/src/。根目录的 index.js 只是防御性占位,本插件是 JS 注入型,没有入口 HTML。
文件体积职责
src/index.js4.2K注册面板、注入 CSS/HTML、调 init
src/panel_html.js25K面板 HTML 字符串
src/main_bundled.js135K / ~3100 行全部业务逻辑 + UI 绑定
src/style.css33.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 Functionmain_bundled.js 求值会直接崩 PS。只有 panel_html.js(纯字符串、无 UXP 调用)可以安全求值。
禁止 bare specifier importimport x from 'photoshop'静默失败,必须用 require('photoshop')
不全量读 main_bundled.js135K ≈ 4 万 token。先 grep 函数名定位行号,只读该函数上下 30 行。
z-index 盖不住 input有文字编辑能力的 input 永远渲染在最上层,这是 UXP 平台铁律。菜单遮挡只能靠 visibility:hidden 临时隐藏。
不用 flex gapUXP 支持不稳,用 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-smmin-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 倍