Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

REPL в Node.js: улучшаем быт разработчик

1,071 views

Published on

Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.

Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.

Published in: Software
  • I can advise you this service - ⇒ www.HelpWriting.net ⇐ Bought essay here. No problem.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! I can recommend a site that has helped me. It's called ⇒ www.WritePaper.info ⇐ They helped me for writing my quality research paper.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

REPL в Node.js: улучшаем быт разработчик

  1. 1. Frontend Meetup with ❤ by REPL в Node.js: улучшаем быт разработчика Ваня Пухтин vk.com/it_61
  2. 2. 2 Что такое REPL REPL — это штука, которая позволяет запускать код покомандно и мгновенно видеть результат его выполнения. Инструменты разработчика в браузерах: ● Chrome DevTools ● Firefox DevTools ● FireBug Командные строки многих ЯП: ● Python ● PHP (php -a) ● Node.js ● Clojure (lein repl) ● Ruby (irb) …и десятки других.
  3. 3. 3 Chrome Developer Tools Console
  4. 4. 4 читаем: Read выводим: Print prompt Read Eval Print Loop выполняем: Eval …и всё это повторяем: Loop Chrome Developer Tools Console // explained
  5. 5. 5 Вот что делает REPL: while (noExit()) { print(eval(read())) } Если у языка нет REPL, то его, как правило, можно реализовать самостоятельно. (и это довольно просто)
  6. 6. 6 Почему это так важно? s/Perl/любой язык xkcd #519
  7. 7. 7 Почему это так важно? В изучении чего-либо очень важна быстрая обратная связь. Bret Victor — Inventing on Principle (https://vimeo.com/36579366) (есть субтитры http://geektimes.ru/post/183394/). Код ↔ Результат REPL предоставляет мгновенную обратную связь. Очень удобен в изучении языка, в экспериментах с библиотеками, для всяких вычислений …ну и просто по фану.
  8. 8. 8 REPL в Node.js Можно: 1. работать с выражениями 2. подгружать модули (require()) 3. видеть все global-ы (нодовские: process, JS-ные: setTimeout, eval, Math, …) 4. неплохо форматировать вывод 5. делать автокомплит! 6. korovans.rob() $ node
  9. 9. ? 9 Как что-то изучать: неинтерактивный режим интерактивный режим (REPL) $ node test.js нужно что-то поправить… $ node test.js а вот ещё… $ node test.js … $ node > скучный бойлерплейт … начинаем эксперименты… > …
  10. 10. 10 interactive mode? $ python -i -c 'x = 1337' выполняем код и входим в интерактивный режим >>> x 1337 … -i When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command. Это то что нужно!
  11. 11. 11 В ноде должно быть что-то подобное!… А вот и нет. https://github.com/nodejs/node-v0.x-archive/issues/3985
  12. 12. 12 В ноде должно быть что-то подобное…? issue, конечно, закрыли :) но дали пару ценных советов require('repl').start({}) Стандартный нодовский REPL это по сути: Эту штуку можно неплохо прокачать и добавить в неё всё, что захочется.
  13. 13. 13 Node.js, стандартный модуль REPL Что можно кастомизировать: 1. prompt 2. потоки input/output (нодовские Stream) 3. evaler (eval) 4. writer (print) 5. будет ли repl крутиться в global-е https://nodejs.org/api/repl.html Из коробки есть все фичи, как и при запуске node без параметров. В документации есть интересный пример как можно (благодаря потокам ;)) слушать Unix-сокет и подключаться к repl работающей ноды. (в Эрланг такое есть для любого сервиса: $ ./erlang_app attach)
  14. 14. 14 repl.js: Попробуем сделать REPL поприятней Попытка запилить флаг --interactive на произвольном коде поначалу не удалась (тогда я ещё не знал про vm). План Б: попытаться решить частный случай этой задачи, научиться подгружать модули и затем входить в repl. Парето доволен, 20% усилий дало 80% результата. $ repl.js path lodash Promise=bluebird ./file.js file=./other_file.js
  15. 15. 15 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object. <Tab> // можно > object.pr <Tab> // можно > object.doStuff(). <Tab> // нельзя > object.prop. <Tab> // «как бы» можно Object.keys(target), Object.getOwnPropertyNames(target)
  16. 16. 16 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object.prop. <Tab> // «как бы» можно // но лучше не надо Object.defineProperty(object, 'prop', { get: function () { console.log('side effects!') return this._prop } })
  17. 17. 17 Работаем с промисами Если выводить промисы в «сыром» виде, то получается белиберда. Вместо этого нужно дождаться, когда промис разрезолвится и показать его внутреннее значение.
  18. 18. 18 Улучшаем вывод Для функций можно показывать их сигнатуры, вместо [Function]. Можно выводить код фукции целиком (src).
  19. 19. 19 Node.js, стандартный модуль vm https://nodejs.org/api/vm.html Позволяет запускать код в контролируемом окружении. var sandbox = vm.createContext(target) // target global в песочнице→ vm.runInContext(code, sandbox) // code — строка с кодом на JS Можно использовать для пользовательского скриптинга, когда источник кода ненадёжен. Позволяет контролировать контекст выполнения кода, чего не может старый-добрый eval().
  20. 20. 20 Резюмируя REPL— это круто и полезно. Модуль repl можно использовать для создания интерактивных оболочек своих сервисов. Модуль vm позволяет запускать код в песочнице с контролируемым контекстом. repl.js это совместимый с repl модуль, который позволяет: 1. подгружать модули на старте 2. дожидаться ответа от промисов 3. красиво форматировать 4. показывать сигнатуры и сорцы функций 5. … и всё то же, что и стандартный repl
  21. 21. 21 Ссылки ● github.com/StreetStrider/repl.js ● repl.it — коллекция REPLов ● tonicdev.com — Node.js REPL с графиками ● vimeo.com/36579366 — Inventing on Principle ● github.com/StreetStrider/console-ultimate ● fredkschott.com/post/2014/06/require-and-the-module-system ● nodejs.org/api/repl.html — node repl ● nodejs.org/api/vm.html — node vm ● nodejs.org/api/modules.html — node Modules
  22. 22. Где мне можно написать: ● vk.com/StreetStrider Где можно меня почитать: ● github.com/StreetStrider ● habrahabr.ru/users/streetstrider/topics/ Что ещё я веду: ● vk.com/it.depot Frontend Meetup 22
  23. 23. That's all, folks! Frontend Meetup

×