Node 0.11.14
Увидел свет 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
Безусловно самой хрупкой и запутанной частью тестирования является полное(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)
Это действительно так просто!
От переводчика
Здесь представлен перевод двух статей Алекса Юнги Юнга, тыц и тыц.
Я на какое то время решил податься на ниву разработок программ с открытым исходным кодом, так что если кто-нибудь желает перехватить эстафету переводов обзоров Алекса, я и наверное сообщество в целом будем рады эти переводы лицезреть.
Спасибо всем за внимание.
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий