14 October 2014

Новости из мира Node: Node 0.11.14, svgexport, node-webkitgtk, Nightmare, Prototypes, node-libpq и node-pg-native

JavaScriptjQueryNode.JS
Translation
Original author: Alex Young

Node 0.11.14


libuv
Увидел свет Node 0.11.14, несущий в себе обновления для uv, http_parser, npm, openssl, и v8.

Похоже на то что данное обновление содержит в себе исправления почти для всех модулей: cluster откатился к версии 0.10 (поведение setupMaster), console.dir принимает опции, события способны выводит/возвращать другие события имеющие способность протекать (event that is leaking). Короче говоря мы имеем много изменений о которых вам нужно знать перед обновлением.

Версия uv входящая в 0.11.14, представляет собой rc1. К тому же, когда я наведался в репозиторий uv что бы проверить последние коммиты я заметил прикольный логотип с уникорнорексом(динозавр-единорог).

svgexport


svgexport (GitHub: shakiba/svgexport, npm: svgexport) от Ali Shakiba утилита командной строки для конвертации SVG файлов в PNG, JPEG, и PDF.

Утилита основана на PhantomJS и автор использовал его для автоматическо преобразования иконок для проектов iOS и Android. Это похоже на прикольное использование Node/Gulp/Grunt как части не-веб-нативной цепи сборок, о чем я раньше не подозревал.

node-webkitgtk


node-webkitgtk (GitHub: kapouer/node-webkitgtk, Лицензия: MIT, npm: webkitgtk) от Jérémy Lal представляет собой коллекцию webkitgtk баиндингов для Node. Программный интерфейс у продукта можно вызывать по цепочке, так что вы можете делать что-то вроде этого:

WebKit().load('http://github.com').png('github.png').pdf('github.pdf')

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

Nightmare


image

Безусловно самой хрупкой и запутанной частью тестирования является полное(full stack) интеграционное тестирование. Я использовал кучу различных подходов базирующихся будь то на PhantomJS или на Selenium, но все они всегда вызывали сложности.

Одна из часто встречающихся проблем кроется в интерфейсах взаимодействия(API) – PhantomJS сам по себе имеет странный API, тем более если вы привыкли к стандартной разработке Node-приложений. Именно поэтому я был в восторге услышав про Nightmare (GitHub: segmentio/nightmare, лицензия: MIT, npm: nightmare), целью которого является упрощение программного интерфейса взаимодействия с PhantomJS.

Если вы хотите опробовать Nightmare в действии, будьте внимательны, вам потребуется установить PhantomJS в вашей системе. Это можно сделать используя Homebrew на маках, а здесь(на главном сайте проекта) можно найти пакеты для других платформ.

Nightmare имеет цепочный(chainable) программный интерфейс (API) который позволит вам запускать JavaScript над DOM'ом на странице-цели. Если, к примеру, у вас есть страница с подгруженным jQuery, тогда вы сможете получить доступ к $ в функции evaluate во время обратного вызова.

Здесь я загрузил веб приложение которое запускает сервер (в app.js), затем я заполнил входной формуляр и послал его на сервер. Код в функции evaluate будет выполнен на странице, так что я смогу использовать jQuery для работы с DOM'ом.

var server = require('./app');
var Nightmare = require('nightmare');
new Nightmare()
  .goto('http://localhost:3000')
  .type('input[name="email"]', 'alex@example.com')
  .type('input[name="password"]', 'password')
  .click('.sign-in')
  .evaluate(function() {
    return $('.sign-out').is(':visible');
  }, function(visible) {
    assert(visible, '.sign-out should be visible');
  })
  .run(function() {
    server.close();
  });

Естественно вы можете использовать данный продукт для общих задач для которых вы бы использовали PhantomJS, но мне кажется это могло бы быть достаточно классно использовать Nightmare для тестирования комплексного кода на стороне клиента.

Prototypes


Alex Fernández представил нашему вниманию prototypes (GitHub: alexfernandez/prototypes, под лицензией: MIT, npm: prototypes). Данный модуль изменяет объекты прототипов, так что используйте его осторожно, но так же вы сможете найти некоторые полезные методы.

Вот пример использования:

'pepitus'.startsWith('pep');
'hi.there'.substringFrom('.'); // 'there'

{ a: 1, b: 2 }.forEach(function(value, key) {
  console.log(key, value);
});

node-libpq и node-pg-native


node-libpq (GitHub: brianc/node-libpq, лицензия: MIT, npm: libpq) от Brian M. Carlson представляет собой коллекцию родных связок(bindings) libpq клиентской Си библиотеки для PostgreSQL.

Задача данного модуля отражать как можно ближе программный интерфейс Си представленный libpq и предоставить абсолютно минимальный уровень абстракции. Данный продукт предназначен быть чрезвычайно низкоуровневым и давать пользователю такой же доступ к libpq какой возможно получить прямо из Си, за исключением node.js! Поскольку за все нужно платить, плата за «близость к железу» заключается в необходимости использовать в JavaScript программный интерфейс близкий по стилю к Си.

Brian является автором популярной PostgreSQL библиотеки — pg, и он так же недавно выпустил node-pg-native, который представляет собой высоко-производительный PostgreSQL модуль использующий node-libpq.

Sean Levy представил нам node-pg-native потому что он без ума от синхронного программного интерфейса:

var rows = client.querySync('SELECT NOW() AS the_date')
console.log(rows[0].the_date) //Tue Sep 16 2014 23:42:39 GMT-0400 (EDT)

Это действительно так просто!

От переводчика


Здесь представлен перевод двух статей Алекса Юнги Юнга, тыц и тыц.

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

Спасибо всем за внимание.
Tags:node.jsjavascripthtml5
Hubs: JavaScript jQuery Node.JS
+21
7.2k 62
Comments 12
Popular right now
Top of the last 24 hours