更新资料
我要使InDesign CC 2018/2019 CEP面板正常工作的所有工作都在https://github.com/theasci/cep-boostrap中。我能够成功地在CEP面板的客户端和主机部分以及“脚本”面板中使用npm软件包。但是,节点和ExtendScript版本太旧了。有关更多详细信息,请参见repo READMEs
原始问题
我在AppleScript中收集了大量脚本,主要用于InDesign CC 2018,我正尝试在ExtendScript中重做(以实现可移植性)。随着ExtendScript Debugger for Visual Studio Code的最新预发行版,我已经使堆栈可以工作了。我能够通过InDesign使用内置的$.write()
和alert()
登录到控制台并显示警报。
我想将npm软件包的优点用于繁重的工作,但我无法使它们正确加载。例如,我想加载相当简单的node-logger(与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中?如果是这样,怎么办?
我应该这样做吗?如果不是,将npm模块与ExtendScript一起使用来自动化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一样运行。在我看来,在您的情况下,与此有关的某些事情失败了。
由于节点内容是完全不同的javascript语言,因此这种方法可能无法实现。
您可能拥有一个可以与jsx脚本进行交互的单独的节点应用程序。主要是,它可以通过在其上运行可能带有参数并将结果返回给它的jsx脚本来操纵InDesign。
这将取决于能否复制AppleScript的“ do javascript”命令,该命令可以在“告诉Adobe应用程序”块中使用,并且可以执行带参数的动态javascript并同步返回结果。
我不确定如何确保所有用户在其系统上安装了正确的项目-用于运行Node。也许他们都必须制作某种安装程序。例如,编写一个简单的jsx脚本时,您所要做的就是将脚本提供给用户,但是使用这种假设的设置,目前还不清楚。
或者,下一步是CEP扩展,它可以在其中使用Node和浏览器,还可以运行jsx脚本并获取结果等。这样做的主要障碍是使整个项目正常工作所需的工作量,首先,它是大量信息,并且可能比制作使用jsx例程的简单自定义节点应用程序带来更多的开销。
如果您找到一种向用户提供易于安装的跨平台node-jsx应用程序的方法,那么在所有内置浏览器用户界面都无法解决的情况下,这可能是向用户交付功能强大的脚本化应用程序的快速方法。对于预期的用途而言,工作量太大。例如,如果您希望在Node中执行jsx无法完成的一些应用程序控制,并且能够使用ExtendScript ScriptUI或其他UI手段来实现,那么效果很好。
关于node.js - 在ExtendScript中使用npm包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54701905/