Филипп Ковалев — Путь в npm

Post on 16-Jun-2015

1.045 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

top related