-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
- YCLIENTS
- Маркетплейс интеграций
- Плагинизация
- Руководство по созданию Frontend плагина
- Сборка и локальная разработка
- Скрипт валидации артефактов сборки
Скрипт валидации артефактов сборки
Скрипт для валидации артефактов сборки плагина перед их использованием или деплоем.
Проблема
После сборки плагина необходимо убедиться, что все артефакты сборки присутствуют, корректно структурированы и соответствуют ожидаемому формату. Это критично для:
- Предотвращения ошибок на этапе деплоя
- Раннего обнаружения проблем со сборкой
- Гарантии целостности артефактов
Решение
Скрипт автоматически проверяет:
- Наличие директории
dist/ - Наличие и валидность общего
dist/contract.json - Соответствие директорий пакетов записям в
contract.json - Наличие и валидность
manifest.jsonв каждом пакете - Существование файлов, указанных в
manifest.json, и соответствие их типов расширениям
Структура артефактов
dist/
├── contract.json # Общий контракт для всех пакетов
└── widget-masters-promo/ # Директория пакета
├── manifest.json # Манифест пакета
├── widget-masters-promo.xxx.js # JS файлы
└── widget-masters-promo.xxx.css # CSS файлы
Использование
Через npm-скрипт (рекомендуется)
npm run validate-build-artifacts
Напрямую
node scripts/build-artifacts/validate-build-artifacts.js
Скрипт должен запускаться из корня проекта (portfolio-plugin/frontend).
Что проверяется
1. Проверка структуры директории
- Наличие директории
dist/ - Что
dist/является директорией - Наличие файла
dist/contract.json - Что
contract.jsonявляется файлом и доступен для чтения
2. Валидация contract.json
- Файл существует и доступен для чтения
- Валидный JSON
- Содержит обязательное поле
packagesс непустым объектом - Содержит обязательное поле
plugin-slug(непустая строка) - Структура каждого пакета:
- Поле
application(строка) - Поле
areas(непустой массив строк)
- Поле
3. Валидация директорий пакетов
- Все пакеты из
contract.jsonимеют соответствующие директории вdist/ - Каждая директория пакета действительно является директорией
- Проверка лишних директорий (предупреждение, не ошибка)
4. Валидация manifest.json в каждом пакете
- Файл
manifest.jsonсуществует в каждом пакете - Файл доступен для чтения
- Валидный JSON
- Содержит ключ с именем пакета
- Значение ключа — массив файлов
- Валидация структуры каждого файла в массиве:
- Поле
name(непустая строка) - Поле
type(строка:scriptилиstylesheet)
- Поле
5. Валидация файлов из manifest.json
- Все файлы из
manifest.jsonсуществуют в директории пакета - Каждый файл действительно является файлом (не директорией)
- Расширения файлов соответствуют их типам:
.jsдля типаscript.cssдля типаstylesheet
Выходные коды
0- валидация прошла успешно1- обнаружены ошибки валидации
Примеры использования
Интеграция в CI/CD
# После сборки npm run build npm run validate-build-artifacts
Локальная проверка
# Проверить артефакты после сборки npm run build && npm run validate-build-artifacts
Была ли статья полезна?