5.0 KiB
5.0 KiB
JSX 加载失败问题分析与解决方案
📋 问题描述
在 Shell + Core 架构分离后,Core 应用中的 JSX 脚本无法正常运行,报错:
Error: EvalScript error.
尽管 JSX 文件路径找到了(C:/Users/35780/AppData/Roaming/DesignerCache/v1.0.5/jsx/index.js),但 evalScript 执行失败。
🔍 根本原因
问题1:JSX 构建格式错误
位置:Designer/plugins/buildJsx/index.ts 第 118 行
await bundle.write({
file: output,
format: 'cjs' // ❌ 问题所在!
});
影响:生成的 JSX 文件使用了 CommonJS 格式,包含:
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = require("./function/index"); // ❌ ExtendScript 不支持 require()
var ActionManager = require("./utils/ActionManager");
问题2:ExtendScript 环境限制
ExtendScript (Adobe JSX 引擎) 不支持:
- ❌ CommonJS 的
require()和exports - ❌ ES6 的
import/export - ❌
'use strict'严格模式
ExtendScript 只支持:
- ✅ 全局函数
- ✅ 立即执行函数表达式 (IIFE)
- ✅ ES3/ES5 语法
✅ 解决方案
方案 1:修改构建配置(长期方案)
修改 Designer/plugins/buildJsx/index.ts:
await bundle.write({
file: output,
format: 'iife', // ✅ 改为 IIFE 格式
name: 'JSXBundle',
strict: false // ✅ 禁用严格模式
});
同时修改 TypeScript 配置:
typescript({
compilerOptions: {
target: 'es5',
strict: false,
moduleResolution: 'node',
esModuleInterop: true,
skipLibCheck: true,
// ...
},
tsconfig: false,
}),
方案 2:临时修复(已应用)
已完成的操作:
- ✅ 创建了简化版本的 JSX 文件 (
index_fixed.js) - ✅ 移除了所有 CommonJS 语法
- ✅ 将依赖项(Logger, ActionManager)内联到单文件中
- ✅ 备份原文件为
index.js.backup - ✅ 替换为修复后的版本
文件位置:
- 修复后:
Designer/dist_core/jsx/index.js - 备份:
Designer/dist_core/jsx/index.js.backup
🧪 测试步骤
1. 清除客户端缓存
Remove-Item -Recurse -Force "$env:APPDATA\DesignerCache" -ErrorAction SilentlyContinue
2. 重启插件
在 Photoshop 中:
- 关闭当前的 DesignerCEP 插件
- 重新打开插件
- 登录账号
3. 检查控制台
打开浏览器开发者工具(F12),查看:
预期成功日志:
[__LDX] Detected Core version v1.0.5
[__LDX] Success: C:/Users/35780/AppData/Roaming/DesignerCache/v1.0.5/jsx/index.js
宿主APP名称:Adobe Photoshop 2024
如果仍然失败,查看:
- 是否有
EvalScript error - ExtendScript 控制台的详细错误信息
4. 测试功能
在插件主界面点击"测试 JSX 调用"按钮,验证:
- ✅
getAppName()返回 "Adobe Photoshop" - ✅
createLayer()可以创建新图层 - ✅
testMergeLayers()可以合并图层
📝 后续工作
短期(紧急)
- 测试修复后的 JSX 是否正常工作
- 如果测试通过,将修复后的文件上传到服务器
中期(优化)
- 修复构建流程,确保未来构建自动生成正确格式
- 解决
g_logger和ActionManager的依赖打包问题 - 更新
deploy_core.py脚本,包含 JSX 构建步骤
长期(架构改进)
- 评估是否需要保留完整的 Logger 和 ActionManager
- 考虑使用 Rollup 的
inlineDynamicImports选项 - 编写自动化测试验证 JSX 在 ExtendScript 环境中的兼容性
🔗 相关文件
| 文件路径 | 说明 |
|---|---|
Designer/plugins/buildJsx/index.ts |
JSX 构建配置(已修改format为iife) |
Designer/dist_core/jsx/index.js |
修复后的 JSX 文件 |
Designer/dist_core/jsx/index.js.backup |
原始的 CommonJS 格式备份 |
Designer/build_jsx_simple.mjs |
简化的构建脚本(待完善) |
💡 技术要点
ExtendScript 兼容性清单
✅ 允许:
- var, function, 普通对象
- IIFE: (function(){ ... })();
- 全局赋值: $.global.xxx = function(){}
- ES5 方法: Array.forEach, Object.keys
❌ 禁止:
- 'use strict'
- require() / exports / module.exports
- import / export
- const / let (部分版本不支持)
- Promise / async/await (需 polyfill)
- 箭头函数 (部分版本)
Rollup 输出格式对比
| 格式 | ExtendScript | 说明 |
|---|---|---|
cjs |
❌ | CommonJS,使用 require/exports |
esm |
❌ | ES Module,使用 import/export |
iife |
✅ | 立即执行函数,所有代码在一个作用域 |
umd |
⚠️ | 通用模块,体积较大但兼容性好 |
📞 联系与支持
如果测试中遇到问题,请提供:
- 浏览器控制台的完整错误日志
- ExtendScript Toolkit 的错误信息(如果有)
- Photoshop 版本和操作系统信息
报告生成时间:2025-12-16
问题状态:✅ 已修复(待测试验证)