Is it possible to execute JSX scripts from outside ExtendScript?

在前端开发中,我们经常会使用 ExtendScript 编写一些 Photoshop、Illustrator 等 Adobe 软件的插件和脚本,以便更高效地完成设计任务。但是,在实际开发中,我们可能希望在其他平台或环境中执行这些 JSX 脚本,例如使用 Node.js 在服务器端生成图像或处理文档。那么,是否可以在 ExtendScript 之外执行 JSX 脚本呢?本文将深入探讨这一问题,并提供相关指导。

ExtendScript 和 JSX

在开始讲解如何在 ExtendScript 之外执行 JSX 脚本之前,我们需要先了解一下 ExtendScript 和 JSX 的概念。

ExtendScript 是 Adobe 公司为其各种创意软件(如 Photoshop、Illustrator、InDesign 等)所开发的一种脚本语言。通过 ExtendScript,我们可以调用软件的各种功能和 API,编写插件和脚本,从而实现自动化、批量化等操作。

JSX 是 ExtendScript 中的一种脚本语言,它是由 JavaScript 扩展而来,专门用于与 Adobe 创意软件进行交互。在 JSX 中,我们可以使用 JavaScript 的语法和函数,同时也可以调用软件提供的各种特定的对象和方法。

在 Node.js 中执行 JSX 脚本

既然 ExtendScript 是一种脚本语言,那么我们可以通过一些工具或库,将 JSX 脚本转换为其他格式的代码,从而在其他平台或环境中执行。

下面,我们以 Node.js 为例,介绍如何在其中执行 JSX 脚本。首先,我们需要安装一些必要的工具和库:

--- ------- ------ ----------------------------
--- ------- ------ -----------

其中,adobe-extendscript-converter 是一个将 ExtendScript 转换为其他语言的工具,支持将 JSX、JSFL 等格式的脚本转换为 JavaScript、TypeScript 等格式的代码。@types/node 则是 Node.js 的类型定义库,提供了 TypeScript 编写 Node.js 应用所需的类型定义。

接下来,我们编写以下代码,将 test.jsx 中的 JSX 脚本转换为 JavaScript,并在 Node.js 中执行:

------ - ---- - ---- ----------------
------ - ---- - ---- -------

----- ------- - --------------- ------------
----- ------ - --------------- -----------

------------------------ ---------- -- ----------- ----- -- -
  -- ----- -
    --------------------- -- ------- --- -- ----- -----
    -------
  -

  ----- ------ - ------------------------

  --- -
    ---------
  - ----- --- -
    --------------------- -- ------- --------- ---
  -
---

在上述代码中,我们使用了 Node.js 的子进程模块 child_process,调用了 extendscript-to-js 命令将 JSX 脚本转换为 JavaScript,并将转换后的文件作为模块导入并执行。

需要注意的是,在 JSX 中我们可以直接调用软件提供的对象和方法,如 app.activeDocumentapp.documents.add() 等。但是,在 Node.js 中并没有这些对象和方法。因此,在执行脚本之前,我们需要先编写一些适配代码,将软件特定的 API 转换为通用的 JavaScript 代码。例如:

-------- ------------------- -
  -- ------- --- --- ------------ -
    ------ -----
  -

  ----- --- - -------------------

  -- ------ -
    ------ -----
  -

  ------ -
    ------ ----------------
    ------- -----------------
    ------- -------------------- -- --
      ----- -----------
      -------- --------------
      -------- --------------

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------