在 ExtendScript 中使用 npm 包
Use npm package in ExtendScript
更新
我为获得功能齐全的 InDesign CC 2018/2019 CEP 面板所做的所有工作都在 https://github.com/theasci/cep-boostrap. I was able to successfully get npm packages working in both the client and host portions of the CEP panel and in the Scripts Panel. However, the node and ExtendScript versions are woefully old. See the repo READMEs 中以获取更多详细信息
原题
我在 AppleScript 中收集了大量脚本,主要用于 InDesign CC 2018,我正尝试在 ExtendScript 中重做(为了可移植性)。随着最近 ExtendScript Debugger for Visual Studio Code 的预发布,我已经让堆栈开始工作了。我可以通过 InDesign 使用内置 $.write()
和 alert()
登录到控制台并显示警报。
我想使用 npm 包的优点来完成繁重的工作,但我无法正确加载它们。例如,我想加载相当简单的节点记录器(与 winston 相比),但加载我能找到的所有垫片似乎不起作用。
这是我的 index.jsx
文件的示例
// Any attempt to write to a read-only property causes a runtime error.
$.strict = true
// Run this script within the InDesign application
#target indesign
var rootDir = File($.fileName).path;
// Load ExtendScript monkey patches to allow for Node.js related functionality
$.evalFile(rootDir + '/vendor/node_modules/extendscript-es6-shim/index.js'); //loads fine
$.evalFile(rootDir + '/vendor/node_modules/extendscript.prototypes/lib/extendscript.prototypes.js'); //loads fine
$.evalFile(rootDir + '/vendor/es-require/lib/require.js'); //loads fine
$.evalFile(rootDir + '/vendor/node_modules/node-logger/logger.js'); //Error: require is not a function
alert("If you're here, it's working!");
我的 .vscode/launch.json
看起来像这样
{
"version": "0.2.0",
"configurations": [
{
"type": "extendscript-debug",
"request": "launch",
"name": "Project name",
"program": "${workspaceFolder}/source/index.jsx",
"targetSpecifier": "indesign-13.064",
"engineName": "main",
}
]
}
如您所见,我有点不知所措,因为 node 和 npm 对我来说是新的。似乎 ExtendScript 没有引入节点模块所需的 require 功能。人们似乎也走向了另一个方向:从节点开始,然后执行 ExtendScript。
问题
- 人们是否将最新版本的 npm 包加载到 ExtendScript 中?如果可以,怎么做?
- 我应该这样做吗?如果没有,使用带有 ExtendScript 的 npm 模块来自动化 Adobe 产品中的内容的最佳方法是什么?
环境
- Mac OSX El Capitan 10.11.6(也在 High Sierra 上试过,结果相同)
- Visual Studio 代码 1.31.1
- 用于 VSCode 0.2.4
的 ExtendScript 调试器插件
npm config list
说 user-agent = "npm/6.5.0 node/v11.9.0 darwin x64"
在此先感谢您对这个可怜的灵魂的怜悯。
ExtendScript 是 ES3,所以我不确定这些猴子补丁使用了哪种魔法来使这种古老的格式 运行 像 Node.js 一样。在我看来,在你的情况下,这方面的某些事情是失败的。
由于节点内容完全不同 javascript,这种方法很可能是不可能的。
您可能有一个单独的节点应用程序可以与您的 jsx 脚本交互。主要是,它可以通过 运行 上的 jsx 脚本来操纵您的 InDesign,这些脚本可能带有参数和 return 结果。
这在某种程度上取决于能否复制 AppleScript 的 'do javascript' 命令,其中 运行s 在 'tell an adobe application' 块中可用并且可以执行动态生成的 javascripts 与参数以及 return 结果同步。
我不确定如何确保所有用户都在他们的系统上安装了正确的项目 - 对于 运行 节点。也许他们都必须制作某种安装程序。例如,当编写一个简单的 jsx 脚本时,您所要做的就是将脚本提供给用户,但是对于这种假设的设置,目前我还不清楚。
或者,下一步是一个 CEP 扩展,它可以在其中使用 Node 和浏览器,也可以 运行 jsx 脚本并获取结果等。这样做的主要障碍是数量使整个项目工作所需的工作,一开始它是大量的信息,并且可能比制作一个使用 jsx 例程的简单自定义节点应用程序带来更多的开销。
如果您找到一种方法来为用户提供易于安装的跨平台 node-jsx 应用程序,那可能是一种向用户提供功能强大的脚本应用程序的快速方法内置浏览器 UI 对于预期用途来说太费力了。例如,如果你想在 Node 中做一些 jsx 不能做的应用程序控制,并且能够通过 ExtendScript ScriptUI 或其他方法来实现 UI 那么它就可以了嗯。
更新
我为获得功能齐全的 InDesign CC 2018/2019 CEP 面板所做的所有工作都在 https://github.com/theasci/cep-boostrap. I was able to successfully get npm packages working in both the client and host portions of the CEP panel and in the Scripts Panel. However, the node and ExtendScript versions are woefully old. See the repo READMEs 中以获取更多详细信息
原题
我在 AppleScript 中收集了大量脚本,主要用于 InDesign CC 2018,我正尝试在 ExtendScript 中重做(为了可移植性)。随着最近 ExtendScript Debugger for Visual Studio Code 的预发布,我已经让堆栈开始工作了。我可以通过 InDesign 使用内置 $.write()
和 alert()
登录到控制台并显示警报。
我想使用 npm 包的优点来完成繁重的工作,但我无法正确加载它们。例如,我想加载相当简单的节点记录器(与 winston 相比),但加载我能找到的所有垫片似乎不起作用。
这是我的 index.jsx
文件的示例
// Any attempt to write to a read-only property causes a runtime error.
$.strict = true
// Run this script within the InDesign application
#target indesign
var rootDir = File($.fileName).path;
// Load ExtendScript monkey patches to allow for Node.js related functionality
$.evalFile(rootDir + '/vendor/node_modules/extendscript-es6-shim/index.js'); //loads fine
$.evalFile(rootDir + '/vendor/node_modules/extendscript.prototypes/lib/extendscript.prototypes.js'); //loads fine
$.evalFile(rootDir + '/vendor/es-require/lib/require.js'); //loads fine
$.evalFile(rootDir + '/vendor/node_modules/node-logger/logger.js'); //Error: require is not a function
alert("If you're here, it's working!");
我的 .vscode/launch.json
看起来像这样
{
"version": "0.2.0",
"configurations": [
{
"type": "extendscript-debug",
"request": "launch",
"name": "Project name",
"program": "${workspaceFolder}/source/index.jsx",
"targetSpecifier": "indesign-13.064",
"engineName": "main",
}
]
}
如您所见,我有点不知所措,因为 node 和 npm 对我来说是新的。似乎 ExtendScript 没有引入节点模块所需的 require 功能。人们似乎也走向了另一个方向:从节点开始,然后执行 ExtendScript。
问题
- 人们是否将最新版本的 npm 包加载到 ExtendScript 中?如果可以,怎么做?
- 我应该这样做吗?如果没有,使用带有 ExtendScript 的 npm 模块来自动化 Adobe 产品中的内容的最佳方法是什么?
环境
- Mac OSX El Capitan 10.11.6(也在 High Sierra 上试过,结果相同)
- Visual Studio 代码 1.31.1
- 用于 VSCode 0.2.4 的 ExtendScript 调试器插件
npm config list
说user-agent = "npm/6.5.0 node/v11.9.0 darwin x64"
在此先感谢您对这个可怜的灵魂的怜悯。
ExtendScript 是 ES3,所以我不确定这些猴子补丁使用了哪种魔法来使这种古老的格式 运行 像 Node.js 一样。在我看来,在你的情况下,这方面的某些事情是失败的。 由于节点内容完全不同 javascript,这种方法很可能是不可能的。
您可能有一个单独的节点应用程序可以与您的 jsx 脚本交互。主要是,它可以通过 运行 上的 jsx 脚本来操纵您的 InDesign,这些脚本可能带有参数和 return 结果。
这在某种程度上取决于能否复制 AppleScript 的 'do javascript' 命令,其中 运行s 在 'tell an adobe application' 块中可用并且可以执行动态生成的 javascripts 与参数以及 return 结果同步。
我不确定如何确保所有用户都在他们的系统上安装了正确的项目 - 对于 运行 节点。也许他们都必须制作某种安装程序。例如,当编写一个简单的 jsx 脚本时,您所要做的就是将脚本提供给用户,但是对于这种假设的设置,目前我还不清楚。
或者,下一步是一个 CEP 扩展,它可以在其中使用 Node 和浏览器,也可以 运行 jsx 脚本并获取结果等。这样做的主要障碍是数量使整个项目工作所需的工作,一开始它是大量的信息,并且可能比制作一个使用 jsx 例程的简单自定义节点应用程序带来更多的开销。
如果您找到一种方法来为用户提供易于安装的跨平台 node-jsx 应用程序,那可能是一种向用户提供功能强大的脚本应用程序的快速方法内置浏览器 UI 对于预期用途来说太费力了。例如,如果你想在 Node 中做一些 jsx 不能做的应用程序控制,并且能够通过 ExtendScript ScriptUI 或其他方法来实现 UI 那么它就可以了嗯。