Files
DP/tempdocs/JSX加载失败问题分析与解决方案.md

194 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# JSX 加载失败问题分析与解决方案
## 📋 问题描述
在 Shell + Core 架构分离后Core 应用中的 JSX 脚本无法正常运行,报错:
```
Error: EvalScript error.
```
尽管 JSX 文件路径找到了(`C:/Users/35780/AppData/Roaming/DesignerCache/v1.0.5/jsx/index.js`),但 `evalScript` 执行失败。
## 🔍 根本原因
### 问题1JSX 构建格式错误
**位置**`Designer/plugins/buildJsx/index.ts` 第 118 行
```typescript
await bundle.write({
file: output,
format: 'cjs' // ❌ 问题所在!
});
```
**影响**:生成的 JSX 文件使用了 **CommonJS 格式**,包含:
```javascript
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = require("./function/index"); // ❌ ExtendScript 不支持 require()
var ActionManager = require("./utils/ActionManager");
```
### 问题2ExtendScript 环境限制
**ExtendScript (Adobe JSX 引擎) 不支持:**
- ❌ CommonJS 的 `require()``exports`
- ❌ ES6 的 `import/export`
-`'use strict'` 严格模式
**ExtendScript 只支持:**
- ✅ 全局函数
- ✅ 立即执行函数表达式 (IIFE)
- ✅ ES3/ES5 语法
## ✅ 解决方案
### 方案 1修改构建配置长期方案
修改 `Designer/plugins/buildJsx/index.ts`
```typescript
await bundle.write({
file: output,
format: 'iife', // ✅ 改为 IIFE 格式
name: 'JSXBundle',
strict: false // ✅ 禁用严格模式
});
```
**同时修改 TypeScript 配置**
```typescript
typescript({
compilerOptions: {
target: 'es5',
strict: false,
moduleResolution: 'node',
esModuleInterop: true,
skipLibCheck: true,
// ...
},
tsconfig: false,
}),
```
### 方案 2临时修复已应用
**已完成的操作:**
1. ✅ 创建了简化版本的 JSX 文件 (`index_fixed.js`)
2. ✅ 移除了所有 CommonJS 语法
3. ✅ 将依赖项Logger, ActionManager内联到单文件中
4. ✅ 备份原文件为 `index.js.backup`
5. ✅ 替换为修复后的版本
**文件位置**
- 修复后:`Designer/dist_core/jsx/index.js`
- 备份:`Designer/dist_core/jsx/index.js.backup`
## 🧪 测试步骤
### 1. 清除客户端缓存
```powershell
Remove-Item -Recurse -Force "$env:APPDATA\DesignerCache" -ErrorAction SilentlyContinue
```
### 2. 重启插件
在 Photoshop 中:
1. 关闭当前的 DesignerCEP 插件
2. 重新打开插件
3. 登录账号
### 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 兼容性清单
```javascript
允许:
- 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` | ⚠️ | 通用模块,体积较大但兼容性好 |
## 📞 联系与支持
如果测试中遇到问题,请提供:
1. 浏览器控制台的完整错误日志
2. ExtendScript Toolkit 的错误信息(如果有)
3. Photoshop 版本和操作系统信息
---
**报告生成时间**2025-12-16
**问题状态**:✅ 已修复(待测试验证)