image


Не так давно наткнулся на детище GitHub'а — Atom. И сразу заинтересовался тем, какие технологии использовались для создания этого редактора. И, как выяснилось, в основе основ лежит Electron — Chromium и node.js в одной коробке. Естественно, решил посмотреть что это за зверь такой, зацепив при этом еще парочку технологий, неведомых для меня на тот момент — TypeScript, SASS и Jade (ныне Pug). Над идеей для приложения даже не думал — это будет десктопная версия всем известного сервиса — Todoist.


Кому интересно — добро пожаловать под кат.


С чего начать?


Особо нетерпеливым — ссылка на исходники.


Ну и начать нужно с клонирования проекта:


git clone https://github.com/Defenderbass/TodoistElectron.git
cd TodoistElectron

Следующим шагом устанавливаем зависимости, для чего запустим батник install.bat, лежащий в корне проекта. Установятся модули сборки и запуска приложения, описанные в ./package.json, модули для работы самого приложения ./source/package.json (в нашем случае они отсутствуют) и зависимости, описанные в ./source/windows/bower.json, для рендеринга клиентской части. На клиенте мы будем использовать Polymer и некоторые кастомные элементы из достаточно большого каталога "Paper Elements", доступного на официальном сайте фреймворка.


После успешной установки всех зависимостей мы можем запустить приложение, выполнив в корневой папке:


build

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


А если подробнее?


А если подробнее, то стоит заглянуть в build.bat


grunt build && run

То есть сначала поднимается зарегестрированный таск, описанный в Gruntfile.js:


grunt.registerTask('build', [
    'clean:build', 
    'sass:dev', 
    'sass:components_dev', 
    'typescript:dev', 
    'typescript:components_dev', 
    'copy:dev',
    'copy:pug', 
    'pug:dev'
]);

Данный таск последовательно поднимает набор действий: компиляция sass-фалов, компиляция TypeScript, шаблонизация pug-фалов. Каждому таску соответствует одноименный файл в директории ./build_scripts, а конфигурации, описанные в этих файлах, автоматически попадают в grunt-config.


По завершению сборки выполняется команда run, запускающая само приложение. Если вы знакомы с Grunt, то разобраться в сборке вам не составит труда.


Немного о структуре


В директории ./source находятся все исходники программы:


  • ./package.json с описанием зависимостей и указанием main-файла;
  • ./app.ts — главный исполняемый файл, в котором поднимается процесс рендеринга страницы(окна);
  • ./windows — директория с файлами для рендеринга, самая объемная в нашем случае. Содержит библиотеки (Polymer), некоторые самописные модули, декораторы классов и кастомные элементы, созданные через Polymer.

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


Webview


Контент самого сервиса Todoist будет расположен и изолирован внутри тэга webview, любезно предоставленного разработчиками Electron. Нам нужно указать лишь атрибут src с адресом отображаемой страницы, указать необходимые стили для корректного и гармоничного отображения страницы.


В заключении...


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


P.S.: В корне проекта присутствует еще один батник (если вы еще не заметили конечно) — "release.bat" — запуск которого соберет проект, запакует его в специальный контейнер app.asar и положит все в папку ./build/release/dist с главным исполняющим фалом "Todoist.exe". Готовую программу можно запаковать в один установочный файл, например, используя такую утилиту как Smart Install Maker, для удобной установки/деинсталяции софта с машин пользователей.

Комментарии (2)


  1. Inkvizitor666
    20.04.2016 18:56

    Какая-то статья ради статьи, в интернете и так много туториалов с подробностями, а тут просто ссылка в гит, да ещё и с батниками.


  1. DioNNiS
    21.04.2016 06:15

    Множество всяких нюансов по проекту есть, но первое что бросилось в глаза — использование *.bat…
    Рекомендую использовать npm scripts (https://docs.npmjs.com/misc/scripts) для сборки и запуска проекта.