Владимир Алаев "Разработка на node.js: инструменты,...

98
Я.Субботник, Санкт-Петербург, 30 июня 2012 года Разработчик Владимир Алаев Разработка на Node.js: инструменты, библиотеки, сервисы 1

Upload: yandex

Post on 29-Nov-2014

5.118 views

Category:

Technology


0 download

DESCRIPTION

Платформа Node.js становится все более популярной. Для нее уже создано много библиотек и инструментов. Рассказ о том, какие из них и для чего мы используем.

TRANSCRIPT

Page 1: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Я.Субботник, Санкт-Петербург, 30 июня 2012 года

РазработчикВладимир Алаев

Разработка на Node.js: инструменты, библиотеки, сервисы

1

Page 2: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Разработка на Node.js

— Инструменты

— Библиотеки

— Сервисы

2

2

Page 3: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Инструменты

3

3

Page 4: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Которые мы используемИнструменты

4

— Что использовать для редактирования кода?

4

Page 5: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

JavaScript в Node.js

— Это все тот же JavaScript

— Используй свой любимый редактор

— NetBeans, Aptana, vim, TextMate, Visual Studio, ...

— Но!

5

5

Page 6: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

6

6

Page 7: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Отладка Node.js приложений

7

7

Page 8: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Знает о структуре Node.js модулей

8

8

Page 9: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

9

Это не реклама! O:-)

9

Page 10: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/9Z97rEJetBrains WebStorm

10

10

Page 11: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/gixPIwSublime Text 2

11

11

Page 12: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Которые мы используемИнструменты

12

— Что использовать для редактирования кода?

— npm

12

Page 13: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://npmjs.orgnpm

13

13

Page 14: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ npm search loggingNAME DESCRIPTION ain Syslog logging for node.js ain-tcp Syslog logging for node.js, with syslog/TCPbeaver CLI tool for piping a log's tail over TCP bolt-logger simple logging for bolt book flexible node.js logging library book-email email transport for book logging framework book-file file transport for book logging framework book-git git middleware for book logging framework

Поиск модуляnpm search

14

14

Page 15: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ npm show bem{ name: 'bem', description: 'BEM Tools', 'dist-tags': { latest: '0.4.2', stable: '0.2.5', unstable: '0.5.10' }, maintainers: [ 'arikon <[email protected]>', 'veged <[email protected]>', 'fedor.indutny <[email protected]>', 'scf <[email protected]>', 'afelix <[email protected]>' ], author: 'Sergey Berezhnoy <[email protected]> (http://github.com/veged)',...

Информация о модулеnpm show

15

15

Page 16: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ npm install bemnpm http GET https://registry.npmjs.org/bemnpm http GET https://registry.npmjs.org/coanpm http GET https://registry.npmjs.org/qnpm http GET https://registry.npmjs.org/inheritnpm http GET https://registry.npmjs.org/borschiknpm http 304 https://registry.npmjs.org/[email protected] ../node_modules/bem!"" [email protected]!"" [email protected]!"" [email protected]!"" [email protected]!"" [email protected] ([email protected])#"" [email protected] ([email protected], [email protected], [email protected])

Установка модуляnpm install

16

16

Page 17: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ npm uninstall bem

Удаление модуляnpm uninstall

17

17

Page 18: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Полезно знатьnpm

18

— ls

18

Page 21: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Полезно знатьnpm

21

— ls

— shrinkwrap

21

Page 22: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

"dependencies": { "coa": "0.3.x", "inherit": "1.0.x", "q": "~0.8.2", "q-fs": "0.1", "cssp": "1.0.x"}

До и послеnpm shrinkwrap

22

"dependencies": { "coa": "0.3.5", "inherit": "1.0.4", "q": "0.8.5", "q-fs": "0.1.27", "cssp": "1.0.5",}

22

Page 23: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Полезно знатьnpm

23

— ls

— shrinkwrap

— publish

23

Page 24: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Необходим package.jsonnpm publish

— Создать с помощью npm init

— Написать руками

24

24

Page 25: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Полезно знатьnpm

25

— ls

— shrinkwrap

— publish

— version

25

Page 26: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Обновляет версию пакетаnpm version

— На конкретно заданную

— major

— minor

— patch

26

26

Page 27: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Которые мы используемИнструменты

27

— Что использовать для редактирования кода?

— npm

— git

27

Page 28: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Ты не используешь git?!

28

28

Page 29: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Которые мы используемИнструменты

29

— Что использовать для редактирования кода?

— npm

— git

— node-inspector

29

Page 30: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Отладка Node.js приложений

— Интегрированный отладчик

— WebStorm

— node-inspector

30

30

Page 31: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

31

31

Page 32: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/cEceO0node-inspector

32

32

Page 33: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Которые мы используемИнструменты

33

— Что использовать для редактирования кода?

— npm

— git

— node-inspector

— JSHint

33

Page 34: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://jshint.comJSHint

34

34

Page 35: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Установка и использованиеJSHint

35

— npm install -g jshint

— jshint myscript.js

35

Page 36: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

36

36

Page 37: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Дмитрий Щадей на Я.Субботнике в Киеве, 5 мая 2012 года

http://bit.ly/PIGC4B

Зачем и как мы используем JSLint

37

37

Page 38: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Библиотеки

38

38

Page 39: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/v0QE1fWinston

39

39

Page 40: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Winston

40

— Разные транспорты

40

Page 41: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

var winston = require('winston');

// Добавляем вывод в консольwinston.add(winston.transports.Console, options);

// Добавляем вывод в файл my.logwinston.add(winston.transports.File, { filename: 'my.log' });

ТранспортыWinston

41

npm search winston

41

Page 42: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Winston

42

— Разные транспорты

— Уровни логирования

42

Page 43: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

var winston = require('winston');

winston.log('debug', 'выделение памяти для чтения файла');

winston.log('info', 'читается файл данных');

winston.log('error', 'ошибка чтения файла');

Уровни логированияWinston

43

43

Page 44: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Winston

44

— Разные транспорты

— Уровни логирования

— Выделение цветом

44

Page 45: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Выделение цветомWinston

45

45

Page 46: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Winston

46

— Разные транспорты

— Уровни логирования

— Выделение цветом

— Профилирование

46

Page 47: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

winston.profile('test');

someFunctionWeWantToProfile();

winston.profile('test');

// "30 Jun 16:00:00 - info: test duration=1200ms"

ПрофилированиеWinston

47

47

Page 48: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/v0QE1fWinston

48

48

Page 49: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/trTtVGMocha

49

49

Page 50: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Mocha

50

— Тестирование асинхронного кода

— Разные виды репортов

50

Page 51: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Dot MatrixРепортеры Mocha

51

51

Page 52: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

SpecРепортеры Mocha

52

52

Page 53: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

TAPРепортеры Mocha

53

53

Page 54: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Landing StripРепортеры Mocha

54

54

Page 55: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

ListРепортеры Mocha

55

55

Page 56: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

ProgressРепортеры Mocha

56

56

Page 57: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

JSONРепортеры Mocha

57

57

Page 58: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

HTMLРепортеры Mocha

58

58

Page 59: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

NyanРепортеры Mocha

59

59

Page 60: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Mocha

60

— Тестирование асинхронного кода

— Разные виды репортов

— Ваша любимая библиотека ассертов

60

Page 61: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

var user = { name: 'tj', pets: ['tobi', 'loki', 'jane', 'bandit']};

user.should.have.property('name', 'tj');

user.should.have.property('pets').with.lengthOf(4);

ShouldАссерты

61

61

Page 62: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

var user = { name: 'tj', pets: ['tobi', 'loki', 'jane', 'bandit']};

expect(user).to.have.property('name', 'tj');

expect(user).to.have.property('pets').to.have.length(4);

ExpectАссерты

62

62

Page 63: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

var user = { name: 'tj', pets: ['tobi', 'loki', 'jane', 'bandit']};

assert.equal(user.name, 'tj');

assert.length(user.pets, 4);

Node.js AssertАссерты

63

63

Page 64: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

ChaiАссерты

64

Все три варианта: should, expect, assert

64

Page 65: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Mocha

65

— Тестирование асинхронного кода

— Разные виды репортов

— Ваша любимая библиотека ассертов

— Несколько стилей описания тестов

65

Page 66: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

describe('Array', function(){ before(function(){ // ... });

describe('#indexOf()', function(){

it('should return -1 when not present', function(){

[1,2,3].indexOf(4).should.equal(-1);

}); });

BDDСтили тестов

66

66

Page 67: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

suite('Array', function(){ setup(function(){ // ... });

suite('#indexOf()', function(){

test('should return -1 when not present', function(){

assert.equal(-1, [1,2,3].indexOf(4));

}); });

TDDСтили тестов

67

67

Page 68: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

module.exports = { before: function(){ // ... },

'Array': { '#indexOf()': { 'should return -1 when not present': function(){ [1,2,3].indexOf(4).should.equal(-1); } } }};

ExportsСтили тестов

68

68

Page 69: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

function ok(expr, msg) { if (!expr) throw new Error(msg);}

suite('Array');

test('#indexOf()', function(){ var arr = [1,2,3]; ok(arr.indexOf(4) == -1);});

QUnitСтили тестов

69

69

Page 70: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Mocha

70

— Тестирование асинхронного кода

— Разные виды репортов

— Ваша любимая библиотека ассертов

— Несколько стилей описания тестов

— Test coverage

70

Page 71: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Test coverage

71

71

Page 72: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/trTtVGMocha

72

72

Page 73: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Хочешь классический ООП?

73

73

Page 74: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Множество фреймворковООП в JavaScript

74

— joose

— MooTools

— class-js

— Sslac

— comb

— UberClass

— ease.js

...

74

Page 75: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

inherit

75

• Простой и понятный код

• __base

• __self

75

Page 76: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/x7htNfinherit

76

76

Page 77: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Колбек на колбекеJavaScript

77

77

Page 78: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

ПодходыАсинхронный код

78

— Fibers (Kberize, Kbers, sync)

— Препроцессоры (streamline, Jscex)

— Control Flow (async, begin, groupie, $N, seq, Slide)

— Promises (deferred, promise, node-promise, when, Q)

78

Page 79: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Почему Promises?— Не требует препроцессинга

— Читабельный код

— Единообразие

— Позволяет писать плоский код

— Внутри все та же асинхронность

Но...

79

79

Page 80: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Нужно немного поломать мозги :)

80

80

Page 81: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://bit.ly/hnNcpUQ

81

81

Page 82: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Консольные утилиты

82

— Команды, опции, аргументы

— Помощь

— Автокомплит

— API для использования из программ

Все это есть в COA!

82

Page 83: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

require('coa').Cmd() .name(process.argv[1]) .title('Test COA util') .helpful() .opt() .name('version') // name for use in API .title('Version') // title for use in text messages .short('v') // short key: -v .long('version') // long key: --version .flag() // for options without value .only() // act as command .act(function(opts) { // add action for option return "COA util 2.3.1"; }) .end() // end option chain and return to main command

83

83

Page 84: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

.cmd() // subcommand declaration .name('greet').title('Test greet command').helpful() .opt() .name('name').title('who to greet, required') .short('n').long('name') .val(function(v) { // validator function return v || 'Unknown' }) .req() // make option required .end() // end option chain and return to command .act(function(opts, args){ console.log('Hello, ' + opts.name + '!!!'); }) .end() // end subcommand chain .completable() // make possible generate completion script .act(function(){ // default handler when run with no params console.log('run with --help to see help') }) .run(process.argv.slice(2)); // parse and run on process.argv

84

84

Page 85: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ node coa.jsrun with --help to see help

85

$ node coa.js --helpTest COA util

Usage: coa.js COMMAND [OPTIONS] [ARGS] coa.js [OPTIONS] [ARGS]

Commands: greet : Test greet command completion : Shell completion

Options: -h, --help : Help -v, --version : Version

$ node coa.js -vCOA util 2.3.1

85

Page 86: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

$ node coa.js greetMissing required option: -n NAME, --name=NAME : who to greet, required

86

$ node coa.js greet -n vegedHello, veged!!!

$ node coa.js completion###-begin-coa.js-completion-##### coa.js command completion script## Installation: coa.js completion >> ~/.bashrc (or ~/.zshrc)# Or, maybe: coa.js completion > /usr/local/etc/bash_completion.d/coa.js#...

86

Page 87: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Command Option Argument

http://bit.ly/zaRCDk

COA

87

87

Page 88: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Сервисы

88

88

Page 89: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Даже ее мама знает про github

89

89

Page 90: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Чем полезен github

— Готовый git репозиторий

— Открытая разработка

— It’s social!

— Code review

90

90

Page 91: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

91

91

Page 92: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

92

92

Page 93: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://travis-ci.org

93

93

Page 94: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Travis build history

94

94

Page 95: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

Travis build log

95

95

Page 96: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

http://travis-ci.org

96

96

Page 97: Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"

97

97