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

5,338 views

Published on

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,338
On SlideShare
0
From Embeds
0
Number of Embeds
2,707
Actions
Shares
0
Downloads
19
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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

  1. 1. Разработка на Node.js:инструменты, библиотеки,сервисыВладимир АлаевРазработчикЯ.Субботник, Санкт-Петербург, 30 июня 2012 года 1
  2. 2. Разработка на Node.js— Инструменты— Библиотеки— Сервисы2 2
  3. 3. Инструменты3 3
  4. 4. ИнструментыКоторые мы используем— Что использовать для редактирования кода?4 4
  5. 5. JavaScript в Node.js— Это все тот же JavaScript— Используй свой любимый редактор— NetBeans, Aptana, vim, TextMate, Visual Studio, ...— Но!5 5
  6. 6. 6 6
  7. 7. Отладка Node.js приложений7 7
  8. 8. Знает о структуре Node.jsмодулей8 8
  9. 9. Это не реклама! O:-)9 9
  10. 10. JetBrains WebStormhttp://bit.ly/9Z97rE10 10
  11. 11. Sublime Text 2http://bit.ly/gixPIw11 11
  12. 12. ИнструментыКоторые мы используем— Что использовать для редактирования кода?— npm12 12
  13. 13. npmhttp://npmjs.org13 13
  14. 14. npm searchПоиск модуля $ npm search logging NAME DESCRIPTION ain Syslog logging for node.js ain-tcp Syslog logging for node.js, with syslog/TCP beaver CLI tool for piping a logs 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 framework14 14
  15. 15. npm showИнформация о модуле $ npm show bem { name: bem, description: BEM Tools, dist-tags: { latest: 0.4.2, stable: 0.2.5, unstable: 0.5.10 }, maintainers: [ arikon <peimei@ya.ru>, veged <veged@mail.ru>, fedor.indutny <fedor.indutny@gmail.com>, scf <scf2k@yandex.ru>, afelix <skryzhanovsky@gmail.com> ], author: Sergey Berezhnoy <veged@mail.ru> (http://github.com/ veged), ...15 15
  16. 16. npm installУстановка модуля $ npm install bem npm http GET https://registry.npmjs.org/bem npm http GET https://registry.npmjs.org/coa npm http GET https://registry.npmjs.org/q npm http GET https://registry.npmjs.org/inherit npm http GET https://registry.npmjs.org/borschik npm http 304 https://registry.npmjs.org/ometajs bem@0.4.2 ../node_modules/bem !"" q-wrap@0.0.1 !"" inherit@1.0.4 !"" qq@0.3.3 !"" coa@0.3.5 !"" q@0.7.2 (event-queue@0.2.0) #"" borschik@0.0.10 (q@0.8.5, q-fs@0.1.27, cssp@1.0.5)16 16
  17. 17. npm uninstallУдаление модуля $ npm uninstall bem17 17
  18. 18. npmПолезно знать— ls18 18
  19. 19. Глобальные модулиnpm ls -g /usr/local/lib !"" async@0.1.0 !"" v8-profiler@3.6.2-1 !"$ winston@0.5.9 % !"" async@0.1.15 % !"" colors@0.6.0-1 % !"" eyes@0.1.7 % !"$ loggly@0.3.11 % % !"" request@2.9.100 % % #"" timespan@2.2.0 % !"" pkginfo@0.2.3 % #"" stack-trace@0.0.6 #"$ xjst@0.2.21 ...19 19
  20. 20. Локальные модули bem-toolscd bem-tools; npm ls bem@0.5.10 /Users/scf/Projects/bem-tools !"" apw@0.3.4 !"" async@0.1.22 !"$ winston@0.5.10 % !"" colors@0.6.0-1 % !"" eyes@0.1.7 % !"$ loggly@0.3.11 % % !"" request@2.9.202 % % #"" timespan@2.2.0 % !"" pkginfo@0.2.3 % #"" stack-trace@0.0.6 #"$ xjst@0.2.21 ...20 20
  21. 21. npmПолезно знать— ls— shrinkwrap21 21
  22. 22. npm shrinkwrapДо и после "dependencies": { "dependencies": { "coa": "0.3.x", "coa": "0.3.5", "inherit": "1.0.x", "inherit": "1.0.4", "q": "~0.8.2", "q": "0.8.5", "q-fs": "0.1", "q-fs": "0.1.27", "cssp": "1.0.x" "cssp": "1.0.5", } }22 22
  23. 23. npmПолезно знать— ls— shrinkwrap— publish23 23
  24. 24. npm publishНеобходим package.json— Создать с помощью npm init— Написать руками24 24
  25. 25. npmПолезно знать— ls— shrinkwrap— publish— version25 25
  26. 26. npm versionОбновляет версию пакета— На конкретно заданную— major— minor— patch26 26
  27. 27. ИнструментыКоторые мы используем— Что использовать для редактирования кода?— npm— git27 27
  28. 28. Ты не используешь git?!28 28
  29. 29. ИнструментыКоторые мы используем— Что использовать для редактирования кода?— npm— git— node-inspector29 29
  30. 30. Отладка Node.js приложений— Интегрированный отладчик— WebStorm— node-inspector30 30
  31. 31. 31 31
  32. 32. node-inspectorhttp://bit.ly/cEceO032 32
  33. 33. ИнструментыКоторые мы используем— Что использовать для редактирования кода?— npm— git— node-inspector— JSHint33 33
  34. 34. JSHinthttp://jshint.com34 34
  35. 35. JSHintУстановка и использование— npm install -g jshint— jshint myscript.js35 35
  36. 36. 36 36
  37. 37. Зачем и как мы используем JSLintДмитрий Щадей на Я.Субботникев Киеве, 5 мая 2012 годаhttp://bit.ly/PIGC4B37 37
  38. 38. Библиотеки38 38
  39. 39. Winstonhttp://bit.ly/v0QE1f39 39
  40. 40. Winston— Разные транспорты40 40
  41. 41. WinstonТранспорты var winston = require(winston); // Добавляем вывод в консоль winston.add(winston.transports.Console, options); // Добавляем вывод в файл my.log winston.add(winston.transports.File, { filename: my.log });npm search winston41 41
  42. 42. Winston— Разные транспорты— Уровни логирования42 42
  43. 43. WinstonУровни логирования var winston = require(winston); winston.log(debug, выделение памяти для чтения файла); winston.log(info, читается файл данных); winston.log(error, ошибка чтения файла);43 43
  44. 44. Winston— Разные транспорты— Уровни логирования— Выделение цветом44 44
  45. 45. WinstonВыделение цветом45 45
  46. 46. Winston— Разные транспорты— Уровни логирования— Выделение цветом— Профилирование46 46
  47. 47. WinstonПрофилирование winston.profile(test); someFunctionWeWantToProfile(); winston.profile(test); // "30 Jun 16:00:00 - info: test duration=1200ms"47 47
  48. 48. Winstonhttp://bit.ly/v0QE1f48 48
  49. 49. Mochahttp://bit.ly/trTtVG49 49
  50. 50. Mocha— Тестирование асинхронного кода— Разные виды репортов50 50
  51. 51. Репортеры MochaDot Matrix51 51
  52. 52. Репортеры MochaSpec52 52
  53. 53. Репортеры MochaTAP53 53
  54. 54. Репортеры MochaLanding Strip54 54
  55. 55. Репортеры MochaList55 55
  56. 56. Репортеры MochaProgress56 56
  57. 57. Репортеры MochaJSON57 57
  58. 58. Репортеры MochaHTML58 58
  59. 59. Репортеры MochaNyan59 59
  60. 60. Mocha— Тестирование асинхронного кода— Разные виды репортов— Ваша любимая библиотека ассертов60 60
  61. 61. АссертыShould var user = { name: tj, pets: [tobi, loki, jane, bandit] }; user.should.have.property(name, tj); user.should.have.property(pets).with.lengthOf(4);61 61
  62. 62. АссертыExpect 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);62 62
  63. 63. АссертыNode.js Assert var user = { name: tj, pets: [tobi, loki, jane, bandit] }; assert.equal(user.name, tj); assert.length(user.pets, 4);63 63
  64. 64. АссертыChaiВсе три варианта: should, expect, assert64 64
  65. 65. Mocha— Тестирование асинхронного кода— Разные виды репортов— Ваша любимая библиотека ассертов— Несколько стилей описания тестов65 65
  66. 66. Стили тестовBDD describe(Array, function(){ before(function(){ // ... }); describe(#indexOf(), function(){ it(should return -1 when not present, function(){ [1,2,3].indexOf(4).should.equal(-1); }); });66 66
  67. 67. Стили тестовTDD suite(Array, function(){ setup(function(){ // ... }); suite(#indexOf(), function(){ test(should return -1 when not present, function(){ assert.equal(-1, [1,2,3].indexOf(4)); }); });67 67
  68. 68. Стили тестовExports module.exports = { before: function(){ // ... }, Array: { #indexOf(): { should return -1 when not present: function(){ [1,2,3].indexOf(4).should.equal(-1); } } } };68 68
  69. 69. Стили тестовQUnit 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); });69 69
  70. 70. Mocha— Тестирование асинхронного кода— Разные виды репортов— Ваша любимая библиотека ассертов— Несколько стилей описания тестов— Test coverage70 70
  71. 71. Test coverage71 71
  72. 72. Mochahttp://bit.ly/trTtVG72 72
  73. 73. Хочешь классический ООП?73 73
  74. 74. ООП в JavaScriptМножество фреймворков— joose— MooTools— class-js— Sslac— comb— UberClass— ease.js ...74 74
  75. 75. inherit• Простой и понятный код• __base• __self75 75
  76. 76. inherithttp://bit.ly/x7htNf76 76
  77. 77. JavaScriptКолбек на колбеке77 77
  78. 78. Асинхронный кодПодходы— Fibers (fiberize, fibers, sync)— Препроцессоры (streamline, Jscex)— Control Flow (async, begin, groupie, $N, seq, Slide)— Promises (deferred, promise, node-promise, when, Q)78 78
  79. 79. Почему Promises?— Не требует препроцессинга— Читабельный код— Единообразие— Позволяет писать плоский код— Внутри все та же асинхронность Но...79 79
  80. 80. Нужно немного поломать мозги :)80 80
  81. 81. Qhttp://bit.ly/hnNcpU81 81
  82. 82. Консольные утилиты— Команды, опции, аргументы— Помощь— Автокомплит— API для использования из программ Все это есть в COA!82 82
  83. 83. 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 command83 83
  84. 84. .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.argv84 84
  85. 85. $ node coa.jsrun with --help to see help$ node coa.js --helpTest COA utilUsage: coa.js COMMAND [OPTIONS] [ARGS] coa.js [OPTIONS] [ARGS]Commands: greet : Test greet command completion : Shell completionOptions: -h, --help : Help -v, --version : Version$ node coa.js -vCOA util 2.3.185 85
  86. 86. $ node coa.js greetMissing required option: -n NAME, --name=NAME : who to greet, required$ 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 86
  87. 87. COACommand Option Argumenthttp://bit.ly/zaRCDk87 87
  88. 88. Сервисы88 88
  89. 89. Даже ее мама знает про github89 89
  90. 90. Чем полезен github— Готовый git репозиторий— Открытая разработка— It’s social!— Code review90 90
  91. 91. 91 91
  92. 92. 92 92
  93. 93. http://travis-ci.org93 93
  94. 94. Travis build history94 94
  95. 95. Travis build log95 95
  96. 96. http://travis-ci.org96 96
  97. 97. 97 97
  98. 98. Владимир Алаевscff@yandex-team.ru@scf2khttp://fb.com/scf2k 98

×