Используйте пакет npm в ExtendScript - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть большая коллекция скриптов на AppleScript, в основном для InDesign CC 2018, которую я пытаюсь переделать в ExtendScript (для переносимости).С недавним предварительным выпуском ExtendScript Debugger для кода Visual Studio я получил стек для работы.Я могу войти в консоль и отображать оповещения, используя встроенные функции $.write() и alert() через InDesign.

Я хотел бы использовать пакет доброты 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",
        }
    ]
}

Как видите, янемного над моей головой, так как узел и npm являются новыми для меня.Кажется, что ExtendScript не имеет требуемой функциональности, необходимой для извлечения модулей узлов.Также кажется, что люди идут в другом направлении: начните с узла, а затем выполните ExtendScript.

Вопросы

  1. Загружают ли люди последние версии пакетов npm в ExtendScript?Если да, то как?
  2. Должен ли я это сделать?Если нет, то как лучше всего использовать модули npm с ExtendScript для автоматизации вещей в продуктах Adobe?

Среда

  • Mac OSX El Capitan 10.11.6 (также пробовал в High Sierra, с тем же результатом)
  • Код Visual Studio 1.31.1
  • Плагин отладчика ExtendScript для VSCode 0.2.4
  • npm config list говорит user-agent = "npm/6.5.0 node/v11.9.0 darwin x64"

Заранее благодарим за жалость к этой бедной душе.

1 Ответ

0 голосов
/ 15 февраля 2019

ExtendScript - это ES3, поэтому я не уверен, какую магию используют эти обезьяньи патчи, чтобы заставить этот архаичный формат работать как Node.Мне кажется, что что-то не так в вашем случае.Поскольку содержимое узла находится в совершенно другом виде javascript, вполне вероятно, что этот подход невозможен.

Возможно, у вас может быть отдельное приложение для узла, которое может взаимодействовать с вашими jsx-скриптами.Главным образом, он может манипулировать вашим InDesign с помощью запуска на нем jsx-скриптов, которые, возможно, содержат аргументы и возвращают результаты.

Это будет зависеть от возможности репликации доступной команды AppleScript 'do javascript', которая доступнав блоке «Рассказать Adobe Application» и может выполнять динамически созданные сценарии JavaScript с аргументами, а также возвращать результаты синхронно.

Я не уверен, как убедиться, что на всех пользователях установлены нужные элементы.их системы - для запуска узла.Может быть, они все должны сделать какой-то установщик.Например, при написании простого jsx-скрипта все, что вам нужно сделать, это предоставить скрипт пользователям, но с этой гипотетической настройкой мне сейчас неясно.

В качестве альтернативы, следующий шаг - этоРасширение CEP, которое может использовать в нем Node и браузер, а также может запускать сценарии jsx и получать результаты и т. Д. Основным препятствием для этого является объем работы, необходимый для работы всего проекта, это огромное количество информации наво-первых, и, возможно, несет в себе гораздо больше накладных расходов, чем создание простого пользовательского приложения узла, использующего процедуры jsx.

Если вы найдете способ предоставить пользователям простое в установке кроссплатформенное приложение node-jsx, это можетбыть быстрым способом доставки мощных скриптовых приложений пользователям в тех случаях, когда все блики от встроенного пользовательского интерфейса браузера - слишком большие усилия для предполагаемого использования.Например, если вы хотите сделать какой-то элемент управления приложения в Node, который jsx не может сделать, и можете обойтись с помощью ExtendScript ScriptUI или другими средствами для пользовательского интерфейса, тогда это сработает хорошо.

...