Новшества node-webkit версии 0.3.6

    Roger Wang 14 декабря объявил о выходе новой версии движка node-webkit созданного в недрах Intel Open Source Technology Center мощного сочетания WebKit и Node.js, позволяющего создавать кросс-платформенные графические приложения методом веборазработки на языках HTML, CSS и JavaScript.

    Новая версия имеет номер 0.3.6 и выглядит вот как:

    [скриншот]

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

    Прежде всего нетрудно заметить, что окна утратили «округлый» и «синенький» вид, похожий на Google Chrome, а вместо того вновь обрели общесистемный вид и форму. (На иллюстрации я привожу вид окна в Windows XP.) Также вернулся значок в заголовке окна. (Для сегодняшней демонстрации я поместил туда значок сайта Хабрахабра.)

    Вот список остальных новшеств этой версии (по сравнению с 0.3.0):

    • Возможен режим kiosk, в котором node-webkit распахивается на весь экран и не может быть закрыт при помощи мыши. (Подходит для создания информационных терминалов.)
       
    • Обеспечивается автозапуск джаваскрипта, упомянутого в параметре node-main в файле package.json. (Скрипт запускается в контексте движка Node — а не в WebKit, как было бы по событию load, например. Это удобно для инициализации модулей Node.)
       
    • Появился API управления приложением. (Можно считать параметры командной строки, можно сразу закрыть все окна приложения.)
       
    • Поддерживается элемент <datalist> а значит, появляются подсказки для автозаполнения текстовых полей по мере печатания текста.
       
    • Создано средство nw-gyp вариант node-gyp, который служит для сборки двоичного кода неджаваскриптовых модулей для node-webkit таким же образом, каким node-gyp собирает их для Node. (Это необходимо, так как ABI у Node и node-webkit различаются.)
       
    • Можно помещать элементы в меню окна. (Ещё один привычный элемент графического интерфейса пользователя.)
       
    • Запуск консольных команд под Windows не приводит к появлению видимых окон консоли. (Как правило, вызывались они лишь ненадолго — и оттого их подмигивание не было никому приятно или полезно.)
       
    • Можно использовать кодеки, защищённые патентом, если снабдить node-webkit собственной сборкою libffmpeg. (Но в комплекте с node-webkit продолжает поставляться ограниченная версия.)
       
    • Окна могут предотвращать или откладывать своё закрытие, перехватывая и обрабатывая событие close.
       
    • Авторы приложений могут прикладывать к ним (в подпапку plugins) некоторый набор браузерных плагинов (NPAPI), который станет использоваться наряду с общесистемным.
       
    • Объект window стал доступен в контексте Node под тем же именем.
       
    • В отладчике стал виден исходный код скриптов из контекста Node.
       
    • Окну можно придать свойство «всегда наверху», чтобы оно перекрывало другие окна приложений.
       
    • Появилась поддержка source maps, то есть возможность видеть в отладчике код приложений на других языках, компилируемых в JavaScript (например, Clojure или TypeScript), если их компилятор это также поддерживает.
       
    • Появилась поддержка Pointer Lock API, то есть возможность удержания мыши в приложении и реагирования на её относительное движение (наподобие 3D-стрелялок), а не на её положение.
       
    • Теперь cookies сохраняются на компьютере после завершения приложения (между запусками).
       
    • Появилась кнопка полного перезапуска приложения его разработчиком (в отладочных целях). Одновременно перезапускается и код для Node, и веботехнологическая часть (HTML, CSS, JS) в WebKit.
       
    • Запуск nw.exe без параметров приводит к загрузке package.json (и приложения) из той же папки, в которой node-webkit лежит.

    Как видите, за два месяца появилось более полутора десятков полезных новшеств, каждое из которых кого-нибудь да порадует, потому что упрощает жизнь.
    Метки:
    Поделиться публикацией
    Комментарии 24
    • +6
      как здорово! Можно подключить ExtJS, и получится почти как обычное настольное приложение
      • +3
        Все бы хорошо, но написание чего-то десктопного(не берем в рассчет десктопный API) займет сильно больше времени, чем на обычном Windows Forms. И куда больше времени на отладку.
        Поэтому практического смысла не вижу.
        • +1
          Лично я противоположенного времени. Особенно если есть опыт веб-разработки больший или равный среднему.
          Единственное что меня смущает, проигрывание при помощи VLC Web Plugin и аппаратное ускорение декодировки видео. Правда что-то мне подсказывает что и на десктопном варианте она не всегда включается.
          • 0
            ума не приложу, как это разработка приложения для OS X займет на Windows Forms меньше времени чем на node-webkit.
        • 0
          Реально ли на нем написать гуишное приложение для управления сервером, как на пример Open Server?
          • 0
            Вы имеете в виду гуишное приложение для управления сервером SCO OpenServer 6?
            • +1
              Скорее, как open-server.ru
              • 0
                В таком случае не вижу препятствий к написанию такой программы поверх node-webkit.

                (Сам, правда, сочинять её не стану — занят другим.)
                • +1
                  Именно как http://open-server.ru/
                  Я то и хочу сам поиграться попробовать :)
            • +2
              В целом решение интересное как альтернатива Adobe AIR
              • +1
                Еще бы на мобилках бы работало быстро (или работало вообще?) — цены бы ему не было.
                • 0
                  Да, аналога node-webkit для мобильников не существует — прежде всего оттого, что там не работает Node. (Насколько мне известно, проект anode далёк от окончательного успеха.)
                  • 0
                    на мобилках возможно и будет — НО:
                    1) для работы node.js нужно портировать libuv
                    2) для iOS работать не будет т.к. Apple не пустит в маркет
                    3) для Android нужно пилить java обертки
                    4) Qt не так давно только стал нормально поддерживать мобильные системы и тач (Symbian не в счет)

                    А вот на Windows RT думаю ОЧЕНЬ скоро будет, т.к. проблем с ARM у V8 нету, а Windows RT поддерживает Win32 (для RT — aka Legacy) API.
                    • 0
                      2) Пустит, если не будет подгрузок JS кода из внешних источников.
                    • +2
                      А чем вам phoneGap не понравился? Или qooxdoo, тогда уж.
                      • 0
                        И это не говоря уже о WAC спецификации.
                  • 0
                    AppJS: те же яйца, только с API и командой.
                    И сайт еще у них есть: appjs.org
                    • +1
                      Тут ведется дискуссия на тему сравнения node-webkit и app.js, но в целом картина остается неясной: кто же из этих двух лучше.
                      • +3
                        Я знаю о существовании AppJS и упоминал этот движок 1 октября.

                        На следующий день (2 октября) я сравнил AppJS и node-webkit; сравнение оказалось не в пользу AppJS (а в пользу node-webkit) по следующим пунктам:

                        • Более непосредственный стиль обращения к API Node.js: node-webkit использует прямое обращение (например, process.version), тогда как в AppJS приходится использовать пространство имён (node.process.version).
                           
                        • AppJS не издаёт звук при помощи тега <audio>, тогда как node-webkit не имеет этой проблемы.
                           
                        • В node-webkit есть поддержка ZIP-упаковки приложений и даже пристыковывания их в хвост к файлу движка. AppJS не имел ничего подобного.
                           
                        • Документация node-webkit более или менее подробна (вики особенно). Документация AppJS почти совершенно отсутствовала, приходилось обходиться примерами кода.
                           
                        • Манифест приложения node-webkit позволяет ограничить минимальную и максимальную ширину окна приложения. Средствами AppJS этого нельзя было достигнуть (по крайней мере, так просто).
                           
                        • node-webkit поддерживает значок и меню в системном лотке, тогда как AppJS (ещё) не поддерживал. То же самое можно было сказать и о некоторых других ништяках (получение имён файлов, управление меню, доступ к буферу обмена).
                           
                        • Как сказано на Гитхабе, создание и разработка node-webkit идёт при некоторой поддержке Intel. По моим ощущениям, node-webkit развивается резвее, чем AppJS.

                        Проведя это сравнение, я забросил AppJS и перешёл к употреблению node-webkit. Допускаю, что с тех пор (за два с лишним месяца) и в AppJS также произошли некоторые изменения к лучшему — например, значок и меню в системном лотке теперь можно поместить и в AppJS.
                        • +1
                          К тому же выводу пришел, изучив вики node-webkit.
                          Еще бы всяческие обертки системных API имелись, так цены бы им не было. Пока что для таких вещей, как, к примеру, системные хуки, придется писать модуль на C++, а node-ffi не вариант для конечного пользователя.
                          • 0
                            Сам я ещё не пробовал этого, но оптимистически подозреваю, что node-ffi можно сперва собрать посредством nw-gyp, а затем раздавать конечным пользователям в готовом двоичном виде — тем способом, который я изложил в первом своём комментарии вон к той проблеме на Гитхабе.
                    • +2
                      Осталось дождаться, когда решат с webSQL и sqlite3. Либо полностью выпилят первое, чтобы заменить на node-sqlite3, либо разберутся, как расширять первое.

                      А то как-то неприятно, что нельзя описать статичное расположение БД (хардлинки не предлагать), да и жесткие ограничения безопасности webSQL на десктопном приложении ни к чему.

                      Я видел обсуждение на github автора статьи и одного из разработчиков на github по этому вопросу. Судя по переписке, идеей заинтересовались. Интересно, как там в этом вопросе дела продвигаются. Если активно взялись, это очень радует.

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

                      Я исходники не успеваю изучать, как они вносят изменения =). Очень активно работают. Поэтому надеюсь смогу в следующем году присоединиться к разработке. Слишком уж он меня перспективой заинтересовал, что немного времени думаю можно будет им уделить.
                      • 0
                        Вопрос. Можно ли без проблем использовать внутри node-webkit какой нибудь node.js mvc framevork например Express? Если да где бы посмотреть примеры? Или это совершенно бессмысленно? Просьба сильно не пинать если я глупость спросил.
                        • 0
                          Прошу прощения! Поспешно задал вопрос. Просто занимаюсь этим в свободное от работы и семьи время, обычно ночью, так что не был внимателен и не заметил. Вот здесь есть ответ.

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