我在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没有拉入节点模块所需的功能。似乎人们走向另一个方向:从节点开始然后执行ExtendScript。
问题
环境
npm config list
说user-agent = "npm/6.5.0 node/v11.9.0 darwin x64"
先谢谢你对这个可怜的灵魂表示同情。
ExtendScript是ES3,所以我不确定那些猴子补丁正在拉动哪种魔法,以使这种古老的格式像Node一样运行。在我看来,虽然你的情况有些失败。由于节点内容是完全不同类型的javascript,因此这种方法很可能无法实现。
您可能有一个可以与jsx脚本交互的独立节点应用程序。主要是,它可以通过在其上运行可能带有参数并将结果返回给它的jsx脚本来操纵您的InDesign。
它有点依赖于能够复制AppleScript的'do javascript'命令,该命令在'tell an adobe application'块中可用,并且可以使用参数执行动态制作的javascripts并同步返回结果。
我不确定如何确保所有用户在他们的系统上安装了正确的项目 - 用于运行Node。也许他们都需要制作某种安装程序。例如,在编写一个简单的jsx脚本时,你所要做的只是向用户提供脚本,但是这个假设设置目前还不清楚。
或者,下一步是CEP扩展,它可以使用Node和其中的浏览器,也可以运行jsx脚本并获得结果等。这方面的主要障碍是使整个项目工作所需的工作量,它最初是一个庞大的信息量,并且可能比使用jsx例程的简单自定义节点应用程序承担更多的开销。
如果您找到一种方法为用户提供易于安装的跨平台node-jsx应用程序,那么在内置浏览器UI的所有内容的情况下,这可能是向用户提供功能强大的脚本应用程序的快速方法对于预期用途来说太费力了。例如,如果您希望在Node中执行一些jsx无法执行的应用程序控制,并且能够使用ExtendScript ScriptUI或UI的其他方法,那么它可以很好地工作。