首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ExtendScript中使用npm软件包

在ExtendScript中使用npm软件包
EN

Stack Overflow用户
提问于 2019-02-15 02:33:30
回答 1查看 1.1K关注 0票数 3

更新

我所有的工作,以使一个充分发挥作用的InDesign CC 2019 CEP面板工作是在https://github.com/theasci/cep-boostrap。我能够成功地让npm包在CEP面板的客户端和主机部分以及脚本面板中工作。然而,节点和ExtendScript版本已经过时了。有关更多细节,请参见README

原始问题

我在AppleScript中收集了大量脚本,主要用于InDesign CC 2018,我正尝试在ExtendScript中重做这些脚本(以便于移植)。随着Visual代码的ExtendScript调试器最近的预发布,我已经开始运行堆栈了。我能够登录到控制台并使用内置的$.write()alert()通过InDesign显示警报。

我想使用的好处是npm包的沉重,但我没有让他们正确地装载。例如,我想加载相当简单的节点记录器(与温斯顿相比),但是加载我能找到的所有shims,似乎不起作用。

下面是我的index.jsx文件的一个示例

代码语言:javascript
复制
// 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看起来像这样

代码语言:javascript
复制
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "extendscript-debug",
            "request": "launch",
            "name": "Project name",
            "program": "${workspaceFolder}/source/index.jsx",
            "targetSpecifier": "indesign-13.064", 
            "engineName": "main",
        }
    ]
}

正如你所看到的,我有点过头了,因为节点和npm对我来说是新的。ExtendScript似乎没有引入节点模块所需的需求功能。人们似乎也会走相反的方向:从节点开始,然后执行ExtendScript。

问题

  1. 人们是否将npm包的最新版本加载到ExtendScript中?如果是这样的话,是怎么做的?
  2. 我该这么做吗?如果不是,使用ExtendScript的npm模块来自动化Adobe的最佳方法是什么?

环境

  • Mac Capitan 10.11.6 (也在高塞拉岛试用,结果相同)
  • 代码1.31.1
  • 用于ExtendScript 0.2.4的VSCode调试器插件
  • npm config listuser-agent = "npm/6.5.0 node/v11.9.0 darwin x64"

提前感谢你对这个可怜的灵魂的怜悯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-15 07:59:19

ExtendScript是ES3,所以我不知道那些猴子补丁是为了让这个过时的格式像Node一样运行而使用哪种魔法。不过,在我看来,这件事在你的情况下是失败的。由于节点内容位于完全不同类型的javascript中,这种方法很可能是不可能的。

您可能有一个单独的节点应用程序,可以与您的jsx脚本交互。主要是,它可以通过在InDesign上运行jsx脚本来操作它,这些脚本可能带有参数并将结果返回给它。

它将依赖于能够复制AppleScript的“do javascript”命令,该命令可以在“tell a adobe应用程序”块内运行,并且可以动态执行带有参数的javascript脚本,并同步返回结果。

我不知道如何确保所有用户都在他们的系统上安装了正确的项目-用于运行Node。也许他们都得做些安装程序。例如,当编写一个简单的jsx脚本时,您所要做的就是向用户提供脚本,但是对于这个假设的设置,我现在还不清楚。

或者,下一步是一个CEP扩展,它可以在其中使用Node和浏览器,也可以运行jsx脚本并获得结果等等。这方面的主要障碍是使整个项目工作所需的工作量,它最初是大量的信息,比使用jsx例程的简单自定义节点应用程序的开销要大得多。

如果您找到了一种向用户提供易于安装的跨平台节点-jsx应用程序的方法,这可能是一种向用户提供功能强大的脚本应用程序的快速方法,在这种情况下,内置浏览器用户界面的所有耀斑对预期的使用来说都太费劲了。例如,如果您希望在Node中执行jsx无法执行的一些应用程序控制,并且能够使用ExtendScript ScriptUI或其他UI方法,那么效果会很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54701905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档