Недавно я начал играть с инструментом под названием Yeoman - меня воодушевило то, что я могу автоматизировать определенные задачи в моей файловой системе, а также интегрироваться с другими распространенными веб-инструментами CLI (интерфейса командной строки).

Будучи поклонником SFDX - инструмента Salesforce Developer Experience CLI для управления вашим проектом по продажам, я решил автоматизировать некоторые из моих повторяющихся задач для любой настраиваемой функции, которую я разрабатывал на платформе Salesforce Lightning.

Мои цели в основном заключались в том, чтобы уменьшить количество повторяющихся вручную задач между разными проектами, над которыми я работаю. Вдобавок я хотел иметь несколько дополнительных шагов настройки, которые позволили бы мне использовать команды SFDX в большей степени, чем я делал раньше, и добавить немного больше изюминки в процесс.

Возможно, некоторые читатели похожи на меня, но каждый раз, когда мне нужно было использовать команду SFDX, я обнаруживал, что либо набираю —-help как часть моей команды, либо сначала перехожу на сайт command docs.

sfdx --help: покажет пример использования команды, все доступные параметры, команды и связанные темы.

sfdx force:doc:commands:display: покажет все команды sfdx

Оказавшись там, потратить некоторое время на поиск правильного пути к команде, а затем начать вводить флаг за флагом (параметры) в зависимости от моих потребностей для каждого шага и для каждого конкретного проекта ... это занимает некоторое время, и на этом пути допускаются некоторые ошибки.

Ааааааааааааааааааааааааааааааааа болееерен рав точу точным ctrl c прервать !!

Так что позже ... Я начал вспоминать некоторые из основных команд с некоторыми предопределенными флагами, но все же некоторые команды довольно длинные, и моя память продолжала подводить меня.

Я предполагаю, что некоторая креативность также возникает из-за того, что я немного ленивый разработчик и помешан на автоматизации, но повышение эффективности также является частью моей повседневной работы, поэтому я пытался найти лучший способ.

Это побудило меня изучить немного больше того, чего я могу достичь с помощью некоторых старых уловок с терминалами, и, возможно, сделать это в гораздо более простой и короткой рутине или, по сути, сделать этот рабочий процесс немного более эффективным.

Исходный файл Bash:

Крутой трюк, который я считаю действительно полезным, заключается в том, что я могу создать файл .bash_profile в моем проекте и использовать его как источник. Внутри я напишу несколько сценариев и псевдонимов для своих команд для этого конкретного проекта или могу сохранить несколько общие общие псевдонимы для всех моих проектов в ~.bash_profile. (сохранит файл в ~/Users/<username>/.bash_profile, а не в конкретной папке проекта)

  • touch .bash_profile: это создаст ваш файл bash внутри вашей текущей папки, чтобы вы могли добавить свой псевдоним и функции.
  • source .bash_profile: эта команда будет использовать этот файл в качестве источника для ваших сценариев bash вместо корневого файла bash.

Это позволит мне сделать команды короче и легче в использовании или запоминании.

Эти псевдонимы также можно объединить с помощью && или записать как функцию.

Сценарии Bash являются мощными и действительно полезными, если вы действительно хотите автоматизировать весь процесс в одну команду лайнера.

Поначалу синтаксис Shell / Bash показался мне немного странным, но после нескольких попыток вы как бы разобрались с ним.

Единственное, что когда я пытался добиться немного более сложной логики и немного более дружелюбного интерфейса, я обнаружил, что продолжаю искать другие решения.

Тут на помощь пришел Йомен ...

Yeoman помогает вам начать новые проекты, предлагая передовые методы и инструменты, которые помогут вам оставаться продуктивными.

Не вдаваясь в документацию слишком глубоко, Yeoman объединяет 3 мощные концепции:

  • Yo инструмент для создания шаблонов - создает новое приложение, записывая файлы конфигурации сборки и т. Д.
  • Система сборки. Используются распространенные плагины node.js, такие как grunt или gulp, которые могут помочь вам создать, предварительно просмотреть и протестировать ваш код.
  • узел диспетчер пакетов (npm) - который помогает установить общие зависимости кода.

Это делается с помощью генераторов yeoman, которые доступны и публикуются как сами пакеты npm и предоставляют процесс, подобный мастеру, который запускается в вашем Терминале.

Я быстро понял, что для построения собственного рабочего процесса вам необходимо создать собственный генератор. Сделать это можно с помощью Генератора для генератора.

Генераторы - это обычные «плагины», которые действуют как строительные блоки для создания вашего рабочего процесса.

TL;DR

  1. Предположим, у вас есть SFDX, но если нет - npm install sfdx-cli --global
  2. Установите yeoman: npm install -g yo
  3. Установить генератор: npm install -g yo generator-generator
  4. Запустите вашу первую yo команду: yo generator

После того, как вы ответите на все вопросы, ваш новый пользовательский генератор будет создан и готов к настройке в соответствии с вашими потребностями.

Первоначальный генератор скелета содержит несколько зависимостей, и, честно говоря, я не потратил слишком много времени, чтобы понять их все.

Войдите в свой файл package.json и проверьте, что вы хотите оставить или изменить. Чтобы упростить этот пример, я удалил и изменил некоторые зависимости, которые я буду использовать в своих примерах.

Выбранные мной зависимости (сторонние библиотеки npm) придадут вашему генератору немного больше искры:

В этой заметке стоит упомянуть некоторые из тех, что уже доступны в Yeoman:

  • Inquirer .js - предоставляет интерфейс командной строки и позволяет проверять и задавать вопросы по условию this.prompt.
  • mem-fs - простой способ доступа к вашей файловой системе this.fs.

После настройки ваших зависимостей и описания проекта - вы готовы приступить к настройке рабочего процесса. Войдите в generators/app/index.js файл.

Я бы посоветовал здесь немного прочитать о рабочем контексте, который описывается циклом выполнения - система очередей с поддержкой приоритета - причудливый способ сказать, что когда yo При вызове методы будут запускаться один за другим по имени и в заданной последовательности.

Суть в том, что - это доступные приоритеты (в рабочем порядке) - я включил некоторые из своих заметок рядом с ними, когда читал официальную документацию йомена:

  1. initializing - здесь начинается процесс (после того, как ваш конструктор построит приложение). Этот шаг может быть полезен для проверки статуса проекта и, например, для получения вашего организационного списка SFDX или использования определенных команд определения схемы для извлечения по умолчанию для ваших последующих вопросов или задач.
  2. prompting - где вы запрашиваете у пользователей варианты (где вы бы называли this.prompt()) - попробуйте добавить некоторые динамические параметры в дополнение к стандартным командам SFDX, проверять вводимые пользователем данные и условно отображать вопросы, которые будут управлять вашим рабочим процессом.
  3. configuring - Сохранение конфигураций и настройка проекта - Здесь мы также можем установить или создать любые параметры конфигурации SFDX, определения пользователей и т. Д.
  4. default - Если название метода не соответствует приоритету, он будет помещен в эту группу.
  5. writing - Здесь мы пишем файлы. Мы можем использовать шаблоны ES6 для копирования и заполнения их пользовательскими данными. Это может быть действительно полезно для любого проекта, организации, файла метаданных или определения данных, с которым мы хотим работать.
  6. conflicts - где разрешаются конфликты (используется для внутреннего использования).
  7. install - Где выполняются установки - мы можем использовать этот шаг для установки любых пакетов обмена приложениями в качестве зависимостей или для клонирования репозиториев Git.
  8. end - Вызывается последним, уборка, сказать до свидания и т. Д.

Хорошо, имеет смысл ... В моих основных примерах я на самом деле не использую всю последовательность, это необязательно, но действительно полезно освоить этот приоритет и использовать его с умом, пока вы начинаете настраивать различные этапы рабочего процесса.

Как только вы начнете соединять суб-генераторы друг с другом - при вызове каждый суб-генератор запускает свой собственный цикл выполнения внутри родительского контекста приоритета. Иногда это может сбивать с толку, но вы всегда можете контролировать порядок вызова функций с помощью метода composeWith.

Давайте посмотрим на несколько примеров

Инициализация генератора hello world с помощью yo:

Скажите yo, чтобы он сказал «Привет, мир», используйте мел, чтобы добавить немного цвета, и используйте shelljs для вызова команды SFDX.

Тот же hello world пример, но давайте сделаем его умнее:

При инициализации с помощью SFDX org list с параметром --json мы можем делать некоторые умные вещи в фоновом режиме, например Запись и Прочтите все подключенные организации в своем центре разработки, что позволяет нам назначить их по умолчанию для нашего рабочего процесса или просто показать / скрыть некоторые вопросы.

В приведенном ниже примере также будет добавлена ​​анимация счетчика - Полезный трюк при запуске команд и выполнении некоторых операций в файловой системе - ora добавить несколько красивых кадров в счетчики и разрешить сообщениям отображать текущий этап процесса.

Подскажите пользователю вопросы:

Начните рассматривать необязательные флаги команд как вопросы и иметь логику видимости, когда отображать или как проверять каждый вопрос.

Реализуйте логику видимости в вопросах рабочего процесса:

Возможные значения типа ввода:
ввод, число, подтверждение, список, необработанный список, раскрытие, флажок, пароль, редактор.

Скопируйте шаблон и напишите файлы с пользовательским вводом:

В этом примере показан рабочий процесс, в котором мы создаем новую рабочую организацию, но мы используем новый файл определения, созданный на основе шаблона, который заполняется ответами пользователя в качестве входных параметров.

Шаблон определения временной организации:

Это позволит вам добавить некоторые дополнительные функции поверх стандартной команды SFDX, добавив возможность указывать функции и настройки, которые должны быть доступны в вашей временной организации, пока вы все еще выполняете одну команду.

Запуск команд SFDX с помощью shelljs

Составление рабочего процесса с субгенераторами:

Здесь начинается волшебство ... Организуйте и соедините свои суб-генераторы вместе, чтобы поддерживать рабочий процесс, выровненный по потоку.

composeWith принимает путь генератора и необязательный объект для входных параметров.

Эти фрагменты должны дать вам краткий обзор того, как настроить методы генератора и интегрироваться с командами SFDX, чтобы выполнять работу за вас в различных частях жизненного цикла генератора.

Целью здесь было найти способ автоматизировать мои повседневные рабочие процессы - этот инструмент определенно оказался достойным для многих задач, которые я бы выполнял как разработчик.

Я надеюсь, что в будущем напишу еще несколько статей, которые покажут еще несколько реальных примеров того, как использовать Yeoman для большей автоматизации повседневных рабочих процессов разработчиков.

А пока вы можете проверить мой образец репозитория, который поможет вам создать свой проект SFDX и управлять своей организацией с помощью генератора Yeoman.



Этот генератор хранится локально, поэтому просто клонируйте репозиторий, следуйте инструкциям на github и введите одно слово:

  • yo dx - Главное меню
  • yo dx:project —Создать новый проект
  • yo dx:org —Создайте новую рабочую организацию
  • yo dx:manage - Еще несколько команд орг.

Йо вы готовы приступить yo к своим рабочим процессам!