zombiebox
Version:
ZombieBox is a JavaScript framework for development of Smart TV and STB applications
151 lines (119 loc) • 10.8 kB
Markdown
Инструменты разработчика
========================
Консольные команды
------------------
### zb init
Инициализация проекта с интерактивным вводом параметров, необходимых для
создания изначальной структуры директорий и файлов. Создаёт директории
**.code-cache**, **app**, **dist**, **web**, а также директории для сцен, попапов,
виджетов, класс глобального объекта приложения (**application.js**) и
начальный файл стилей (**application.css**).
### zb build [platform list] [--config config.js] [--enableConsole]
Сборка приложения для публикации под конкретные платформы (можно указать
несколько через знак пробела).
Процесс сборки можно условно разделить на два шага:
- Компиляция исходного кода;
- Передача обработки платформе — создание специфичных артефактов или
осуществление обработки скомпилированного кода, например создание
файлов конфигурации платформы, преобразование исходного кода,
архивирование и т.д.
При сборке доступен опциональный флаг активации логирования
(`--enableConsole`), при наличии которого все лог-сообщения будут
обработаны, в противном случае — проигнорированы.
Путь до артефакта сборки:
**dist/%application\_version%/%platform\_name%/index.html**. Там же могут
находится артефакты, созданные самой платформой.
Для процесса сборки существует возможность создания хуков. Для этого
следует создать в корневом каталоге файлы **prebuild.js** и **postbuild.js** для
обработки до компиляции и после, соотвественно. Файлы хуков должны быть
node-модулем и принимать на вход функцию обратного вызова процесса и
объект данных сборки.
В процессе компиляции все JS-файлы приложения, а также фреймворка и
платформы будут сжаты и оптимизированы с требуемым уровнем
оптимизации (по умолчанию `ADVANCED_OPTIMIZATIONS`) с помощью
<abbr title="Google Closure Compiler">GCC</abbr>,
<abbr title="Cascading Style Sheets">CSS</abbr>-файлы будут минифицированы, а ссылки на
изображения, содержащиеся в <abbr title="Cascading Style Sheets">CSS</abbr>, заменены на base64.
### zb run [--config config.js]
Запускает web-based приложение, доступное по умолчанию по адресу
**http://localhost:1337** и являющееся платформонезависимым. То есть,
приложение автоматически распознает текущую платформу, основываясь на
перечне подключённых платформ, и использует её в процессе работы.
При данном виде разработки не происходит полноценной сборки приложения,
то есть, исходный код всегда будет актуальным, без необходимости
осуществлять дополнительные действия, когда вносятся изменения.
Дополнительно актуализировать исходный код помогают наблюдатели за изменениями файлов,
запускающиеся вместе с сервером и реагирующие на изменениями в **.jst** и
**.css** файлах. При наличии изменений происходит перекомпиляция шаблонов и
создание <abbr title="Cascading Style Sheets">CSS</abbr>-префиксов.
Также для web-based приложения есть возможность кастомизировать исходный
код с помощью файла **web/dev.js**. Его включение происходит после всех
основных файлов, но перед точкой входа в приложение, тем самым давая
возможность заменить любой метод или задать специфичную конфигурацию.
Обычно данный файл добавляется в **.%choose\_your\_scv%ignore**.
### zb buildCode [--config config.js]
Генерирует boilerplate-код приложения, компилирует файлы шаблонов,
создаёт <abbr title="Cascading Style Sheets">CSS</abbr>-префиксы, позволяющие забыть о проблемах кроссбраузерности
<abbr title="Cascading Style Sheets">CSS</abbr>-кода.
Генерируемый boilerplate-код находится в директории **.code\_cache** и
влючает в себя скомпилированные шаблоны, а также следующие файлы:
- **index.js** — точка входа (entry point). Инстанцирует глобальный
объект приложения, который будет доступен из глобальной переменной
`app`;
- **base-application.js** — содержит класс, наследником которого
является глобальный объект приложения. В него инкапсулирована логика
по определению платформы и регистрация сцен (сцены, имеющие префикс
`abstract-`, не регистрируются);
- **package-info.js** — содержит информацию о приложении;
- **autoprefixer.css** — сгенерированные префиксы для <abbr title="Cascading Style Sheets">CSS</abbr>-файлов.
В случае запуска web-based приложения командой `zb run` или сборки под
платформу командой `zb build`, нет необходимости в выполнении этой
команды, так как она является частью соответствующего процесса.
### zb addScene, zb addPopup, zb addWidget [name] [--base %baseclass%] [--config config.js]
Генерирует boilerplate-код для выбранной сущности. Параметр `name` может
содержать несколько значений, разделённых пробелом, так, например, при
вызове `zb addWidget my darling widget` будет сгенерирован виджет
**%project\_namespace%.widgets.MyDarlingWidget**.
### Options
#### --config
Можно указывать несколько конфигов. Если указан хотя бы один, то отменяется загрузка конфига по умолчанию
(`%project_root%/config.js`) и загружаются файлы из опций `--config`.
### zb-log-server
Поднимает сервер, который слушает входящие логи.
Абстракция над платформой
-------------------------
ZombieBox предоставляет абстракцию над платформой, обеспечивая
кроссплатформенную разработку — единожды написанный код будет работать
на всех требуемых платформах.
Но при этом есть ограничения отдельных платформ, не позволяющие в полной
мере реализовать всю функциональность.
Абстракция над платформами предоставляет следующие интерфейсы:
- `ZBPlatform` — входная точка для платформы, отвечает за сборку,
конфигурирование и передачу реализованных компонентов в процесс
сборки приложения;
- `IDevice` — основной компонент платформы, инкапсулирует в себя
остальные компоненты, содержит логику по обработке <abbr title="On-Screen Display">OSD</abbr>, отвечает за создание видео-объекта, инициализацию и выход
из устройства;
- `IInfo` — предоставляет информацию об устройстве. Например,
серийный номер, модель, версия программного обеспечения и т.д.;
- `IInput` — отвечает за обработку нажатий кнопок и перемещение
курсора (если поддерживается) устройств ввода;
- `IStorage` — предоставляет возможность сохранения данных на
клиентском устройстве, сохраняющиеся между запусками приложения;
- `IVideo` – видео-объект, реализует API по управлению потоком,
воспроизведением, громкостью, пропорциями и соотношением сторон.
Обеспечивает транслирование событий по воспроизведению видео потока;
Компоненты
----------
В состав фреймворка входят следующие готовые компоненты:
- Video controls
- Video progress bar
- Button
- Throbber
- Input
- Keyboard
- Help bar
- Google analytics tools
- Scrolled list
- Linear list with navigation
- Grid with navigation