Филипп Ковалев — Путь в npm
TRANSCRIPT
Яндекс
Филипп Ковалевразработчик интерфейсов
Зачем модули?
1. Делимся решениями с другими командами
2. Уменьшаем кодовую базу приложения
3. Повышаем качество кода
2
Почему показываем «наружу»
1. Тесты, документация, дисциплина
2. Фидбек: фич-реквесты, баги, критика
3. Соискатели могут ознакомиться с предметом
3
Путь 1: xamel
Open source
at start
Сразу разрабатывался публично
5
npm install xamel
xamel .parse(xmlString, function( err , xml ) {
if ( ! err ) {
console.log( JSON.stringify( xml ) );
}
});
01.
02.
03.
04.
05.
6
<text>
м <fix> о </fix> сква
</text>
{ text: {
_: 'мсква' ,
fix: 'о'
} }
Порядок узлов: пример
01.
02.
03.
01.
02.
03.
04.
7
Порядок узлов: issues
8
API для доступа к узлам
xml .$( 'banner/title/text()' )
xml .$( 'menu/item' ).eq( 0 ).attr( 'link' )
xml .$( 'list/*' ).eq( 0 ).name
01.
02.
03.
9
Array#map/reduce
var result = xml .$( 'text/node()' )
.map(function( el ) {
return ( el instanceof xamel.Tag ) ?
{ fix : el .text() } :
el ;
});
01.
02.
03.
04.
05.
06.
10
Умеет разбирать часть дерева
xamel .parse(
xml,
{ buildPath : 'path/to/node' } ,
function( error , nodeset ) {
// ...
});
01.
02.
03.
04.
05.
06.
11
Тестируем производительность
process.env.NODE_XAMEL_PERF_FACTOR = .75
12
Travis CI
process.env.TRAVIS === 'true'
13
Путь 2: nodules
Отчуждаем
части
приложения
nodules / susanin
роутер
npm install susanin
— Заточен под ЧПУ
— Парсинг запроса и формирование ссылок
— Гибкое определение параметров в URL
— Связывание URL с данными
16
nodules / terror
обработка илогированиеошибок
npm install terror
var Terror = require( 'terror' ),
MyError = Terror .create( 'MyError' , {
STRANGE_THING_HAPPENS :
[ 2001 , 'Something strange happens' ]
});
01.
02.
03.
04.
05.
18
Бросаем исключение
throw MyError .create(
MyError .CODES.STRANGE_THING_HAPPENS);
throw new MyError (
MyError .CODES.STRANGE_THING_HAPPENS);
01.
02.
01.
02.
19
Нормализуем «чужие» ошибки
try {
// ...
} catch( error ) {
MyError .ensureError( error ).log();
}
01.
02.
03.
04.
05.
20
Readable and parsable
21
Кастомизация
22
nodules / asker
http.requestwrapper
npm install asker
— gzip
— Кастомная обработка HTTP кодов ответа
— Перезапросы
— Тонкая настройка http.Agent
— Интеграция с Terror
— Promise обертка vow-asker
24
OM-NOM-NOM
25
Пример вызова
var ask = require( 'asker' );
ask ({ host : 'ya.ru' }, function( err , response ) {
if ( ! err ) {
console.log( response .data);
}
});
01.
02.
03.
04.
05.
06.
26
NO PROMISES
Объект response.meta
{
options : Object ,
time : { network : Number , total : Number },
retries : { total : Number , used : Number }
}
01.
02.
03.
04.
05.
28
nodules / luster
cluster wrapper
luster
{
"app" : "worker.js"
}
luster -c ./path/to/luster.conf.json
01.
02.
03.
30
Костыли
— Запуск воркера без кластера
— Отладка воркеров на разных портах
— Двухуровневая балансировка
31
Джентельменский набор
— pid–файлы
— Логирование
— Поддержание пула воркеров живыми
— Перезапуск без простоя
— Watcher файловой системы
— Плагины
32
Печальнаяистория
overclocked / mc
Чек лист
— Тесты и jshint конфиг
— Документация для людей
— «Чистота» API
— CI и контроль за зависисмостями
— Взаимодействие с пользователями
36
Вопросы?
37
github.com/nodules