SlideShare a Scribd company logo
Frontend Meetup
with ❤ by
REPL в Node.js: улучшаем быт разработчика
Ваня Пухтин
vk.com/it_61
2
Что такое REPL
REPL — это штука, которая позволяет запускать код
покомандно и мгновенно видеть результат его выполнения.
Инструменты разработчика в браузерах:
●
Chrome DevTools
●
Firefox DevTools
●
FireBug
Командные строки многих ЯП:
●
Python
●
PHP (php -a)
●
Node.js
●
Clojure (lein repl)
●
Ruby (irb)
…и десятки других.
3
Chrome Developer Tools Console
4
читаем:
Read
выводим:
Print
prompt
Read
Eval
Print
Loop
выполняем:
Eval
…и всё это повторяем:
Loop
Chrome Developer Tools Console // explained
5
Вот что делает REPL:
while (noExit())
{
print(eval(read()))
}
Если у языка нет REPL, то его, как правило,
можно реализовать самостоятельно.
(и это довольно просто)
6
Почему это так важно?
s/Perl/любой язык
xkcd #519
7
Почему это так важно?
В изучении чего-либо очень важна быстрая обратная связь.
Bret Victor — Inventing on Principle
(https://vimeo.com/36579366)
(есть субтитры http://geektimes.ru/post/183394/).
Код ↔ Результат
REPL предоставляет мгновенную обратную связь.
Очень удобен в изучении языка,
в экспериментах с библиотеками,
для всяких вычислений
…ну и просто по фану.
8
REPL в Node.js
Можно:
1. работать с выражениями
2. подгружать модули (require())
3. видеть все global-ы (нодовские: process, JS-ные: setTimeout, eval, Math, …)
4. неплохо форматировать вывод
5. делать автокомплит!
6. korovans.rob()
$ node
?
9
Как что-то изучать:
неинтерактивный режим интерактивный режим (REPL)
$ node test.js
нужно что-то поправить…
$ node test.js
а вот ещё…
$ node test.js
…
$ node
>
скучный бойлерплейт …
начинаем эксперименты…
>
…
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
В ноде должно быть что-то подобное!…
А вот и нет.
https://github.com/nodejs/node-v0.x-archive/issues/3985
12
В ноде должно быть что-то подобное…?
issue, конечно, закрыли :)
но дали пару ценных советов
require('repl').start({})
Стандартный нодовский REPL это по сути:
Эту штуку можно неплохо прокачать и добавить
в неё всё, что захочется.
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
repl.js: Попробуем сделать REPL поприятней
Попытка запилить флаг --interactive на произвольном коде
поначалу не удалась (тогда я ещё не знал про vm).
План Б: попытаться решить частный случай этой задачи,
научиться подгружать модули и затем входить в repl.
Парето доволен, 20% усилий дало 80% результата.
$ repl.js path lodash Promise=bluebird ./file.js file=./other_file.js
15
Пару слов про автокомлит
Автокомплит — дело непростое.
> var object = { … }
> object. <Tab> // можно
> object.pr <Tab> // можно
> object.doStuff(). <Tab> // нельзя
> object.prop. <Tab> // «как бы» можно
Object.keys(target),
Object.getOwnPropertyNames(target)
16
Пару слов про автокомлит
Автокомплит — дело непростое.
> var object = { … }
> object.prop. <Tab> // «как бы» можно
// но лучше не надо
Object.defineProperty(object, 'prop', {
get: function () {
console.log('side effects!')
return this._prop
}
})
17
Работаем с промисами
Если выводить промисы в «сыром» виде, то получается белиберда.
Вместо этого нужно дождаться, когда промис разрезолвится
и показать его внутреннее значение.
18
Улучшаем вывод
Для функций можно
показывать их сигнатуры,
вместо [Function].
Можно выводить код
фукции целиком (src).
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
Резюмируя
REPL— это круто и полезно.
Модуль repl можно использовать для создания
интерактивных оболочек своих сервисов.
Модуль vm позволяет запускать код в песочнице
с контролируемым контекстом.
repl.js это совместимый с repl модуль, который позволяет:
1. подгружать модули на старте
2. дожидаться ответа от промисов
3. красиво форматировать
4. показывать сигнатуры и сорцы функций
5. … и всё то же, что и стандартный repl
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
Где мне можно написать:
●
vk.com/StreetStrider
Где можно меня почитать:
●
github.com/StreetStrider
●
habrahabr.ru/users/streetstrider/topics/
Что ещё я веду:
●
vk.com/it.depot
Frontend Meetup
22
That's all, folks!
Frontend Meetup

More Related Content

PDF
Pundle для менджемента зависимостей в python проектах
Mikhail Krivushin
 
PDF
JPHP - О проекте на простом языке
Dmitry Zaytsev
 
PPT
C# 5.0. Взгляд в будущее
GetDev.NET
 
PDF
Про асинхронное сетевое программирование
Python Meetup
 
PPTX
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
PDF
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp
 
PDF
Отладка в Python: 2016 edition
Кирилл Борисов
 
PDF
dont badmouth mojo
Anton Ukolov
 
Pundle для менджемента зависимостей в python проектах
Mikhail Krivushin
 
JPHP - О проекте на простом языке
Dmitry Zaytsev
 
C# 5.0. Взгляд в будущее
GetDev.NET
 
Про асинхронное сетевое программирование
Python Meetup
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp
 
Отладка в Python: 2016 edition
Кирилл Борисов
 
dont badmouth mojo
Anton Ukolov
 

What's hot (20)

PDF
Rust: история языка и контекст применения
Nikita Baksalyar
 
PDF
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp
 
PDF
Многопоточность в R
Алексей Селезнёв
 
PDF
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
PDF
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
 
PDF
Пакет future
Алексей Селезнёв
 
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
PDF
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Minsk Linux User Group
 
PPTX
Base php 1
Vladimir Burdaev
 
PPTX
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
QA Dnepropetrovsk Community (Ukraine)
 
PDF
"Внутренности" CPython, часть II
Python Meetup
 
PPTX
C++ Core Guidelines
Sergey Zubkov
 
PDF
Perl in da shell
Anton Ovchinnikov
 
PDF
Беглый обзор "внутренностей" Python
Maxim Kulsha
 
PDF
Разница в подходах анализа кода компилятором и выделенным инструментом
Tatyanazaxarova
 
PPTX
Увеличиваем мощь фреймворка Kdt & code`s generator
SQALab
 
PPTX
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
7bits
 
PPTX
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
PPTX
Полный цикл разработки на Python + Django
Azamat Tokhtaev
 
PPTX
Html лаб 2
Vladimir Burdaev
 
Rust: история языка и контекст применения
Nikita Baksalyar
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp
 
Многопоточность в R
Алексей Селезнёв
 
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Minsk Linux User Group
 
Base php 1
Vladimir Burdaev
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
QA Dnepropetrovsk Community (Ukraine)
 
"Внутренности" CPython, часть II
Python Meetup
 
C++ Core Guidelines
Sergey Zubkov
 
Perl in da shell
Anton Ovchinnikov
 
Беглый обзор "внутренностей" Python
Maxim Kulsha
 
Разница в подходах анализа кода компилятором и выделенным инструментом
Tatyanazaxarova
 
Увеличиваем мощь фреймворка Kdt & code`s generator
SQALab
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
7bits
 
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
Полный цикл разработки на Python + Django
Azamat Tokhtaev
 
Html лаб 2
Vladimir Burdaev
 
Ad

Viewers also liked (20)

PPTX
Clase Modelo Blended Learning
Lili21on
 
DOCX
Conocimiento del derecho
DEYSITATIANAIB
 
PPTX
Small Small Catch Monkey:The Success Story of Laurelwood
vakunta
 
PDF
Cath mobile
Lokender Sarna
 
PPTX
My last vacation
Yasmid Mora
 
DOCX
Fitri artikel unpam_pertemuan3
Ayu2602
 
DOCX
Trabajos segunda parcial de deontologia
DEYSITATIANAIB
 
PPTX
програми службового рівня
Маргарита Бодрецкая
 
PPT
Reading the Camfranglais Novel: Some Pedagogical Models
vakunta
 
PPTX
Question 6
bengxbbs
 
PDF
Data Warehousing Solution
Tushan Jain
 
PDF
Master Thesis brief
Ingrid Cravioto
 
PDF
Параллельное управление, Елена Сибилева (Жмек дизайн)
IT61
 
PPTX
Nd teknologi forum2016-sosi – gml – json
Jan Kristian Jensen
 
PPTX
Linked inslideshare
cvargaszara
 
DOCX
Resume
Veerendra Singh
 
PPT
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Fields in Trust
 
PPT
геометрична прогресія
kristina_chepil
 
PPT
презентація
kristina_chepil
 
Clase Modelo Blended Learning
Lili21on
 
Conocimiento del derecho
DEYSITATIANAIB
 
Small Small Catch Monkey:The Success Story of Laurelwood
vakunta
 
Cath mobile
Lokender Sarna
 
My last vacation
Yasmid Mora
 
Fitri artikel unpam_pertemuan3
Ayu2602
 
Trabajos segunda parcial de deontologia
DEYSITATIANAIB
 
програми службового рівня
Маргарита Бодрецкая
 
Reading the Camfranglais Novel: Some Pedagogical Models
vakunta
 
Question 6
bengxbbs
 
Data Warehousing Solution
Tushan Jain
 
Master Thesis brief
Ingrid Cravioto
 
Параллельное управление, Елена Сибилева (Жмек дизайн)
IT61
 
Nd teknologi forum2016-sosi – gml – json
Jan Kristian Jensen
 
Linked inslideshare
cvargaszara
 
Saltex 2016, Fields in Trust: Guidance for Outdoor Sport and Play
Fields in Trust
 
геометрична прогресія
kristina_chepil
 
презентація
kristina_chepil
 
Ad

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

PDF
Introduction in Node.js (in russian)
Mikhail Davydov
 
PDF
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Yandex
 
PDF
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
GeeksLab Odessa
 
PPT
Типичный стек технологий для использования с Node.js
Serge Shirokov
 
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
PPT
Node.js (RichClient)
Serge Shirokov
 
Introduction in Node.js (in russian)
Mikhail Davydov
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Yandex
 
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
GeeksLab Odessa
 
Типичный стек технологий для использования с Node.js
Serge Shirokov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Node.js (RichClient)
Serge Shirokov
 

More from IT61 (20)

PDF
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
IT61
 
PDF
Нина Марменкова - Найти себя и нАЙТИ своих
IT61
 
PDF
Павел Седаков - Performance review: теория и практика оценки эффективности ра...
IT61
 
PPTX
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджера
IT61
 
PPTX
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
IT61
 
PDF
Ольга Стратанович - Менеджер будущего
IT61
 
PDF
Константин Гуфан - Сколько лет живет любовь к работе?
IT61
 
PDF
Организация тестирования в Inostudio
IT61
 
PDF
Нагрузочное тестирование API. Как летать, а не ползать?
IT61
 
PPTX
Calabash. Автоматизированное тестирование мобильных приложений
IT61
 
PDF
Особенности тестирования мобильных приложений
IT61
 
PDF
Machine learning на примере алгоритма ценообразования, Овсеп Авакян
IT61
 
PDF
Machine learning c использованием нейронных сетей, Дмитрий Лапин
IT61
 
PDF
Изоморфизм как предметное поле data science, Артем Москалец
IT61
 
PDF
Data scientology starter pack, Сергей Казаков
IT61
 
PDF
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
IT61
 
PDF
Тренды в процессах разработки, Константин Иванов (TradingView)
IT61
 
PDF
Амина Прима - Ой, все! Я ухожу
IT61
 
PDF
Как перестать беспокоиться и начать тестировать или это волшебное слово Agile
IT61
 
PDF
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
Александр Шорин - Как перестать гоняться за кандидатом и начать жить?
IT61
 
Нина Марменкова - Найти себя и нАЙТИ своих
IT61
 
Павел Седаков - Performance review: теория и практика оценки эффективности ра...
IT61
 
Дмитрий Костюк - Необходимые инструменты и качества для роста менеджера
IT61
 
Константин Гуфан - Чем должны заниматься менеджеры и чем они на самом деле за...
IT61
 
Ольга Стратанович - Менеджер будущего
IT61
 
Константин Гуфан - Сколько лет живет любовь к работе?
IT61
 
Организация тестирования в Inostudio
IT61
 
Нагрузочное тестирование API. Как летать, а не ползать?
IT61
 
Calabash. Автоматизированное тестирование мобильных приложений
IT61
 
Особенности тестирования мобильных приложений
IT61
 
Machine learning на примере алгоритма ценообразования, Овсеп Авакян
IT61
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
IT61
 
Изоморфизм как предметное поле data science, Артем Москалец
IT61
 
Data scientology starter pack, Сергей Казаков
IT61
 
Эффективный отдел техподдержки сайтов без вашего участия, Максим Мул (Рабочие...
IT61
 
Тренды в процессах разработки, Константин Иванов (TradingView)
IT61
 
Амина Прима - Ой, все! Я ухожу
IT61
 
Как перестать беспокоиться и начать тестировать или это волшебное слово Agile
IT61
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 

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

  • 1. Frontend Meetup with ❤ by REPL в Node.js: улучшаем быт разработчика Ваня Пухтин vk.com/it_61
  • 2. 2 Что такое REPL REPL — это штука, которая позволяет запускать код покомандно и мгновенно видеть результат его выполнения. Инструменты разработчика в браузерах: ● Chrome DevTools ● Firefox DevTools ● FireBug Командные строки многих ЯП: ● Python ● PHP (php -a) ● Node.js ● Clojure (lein repl) ● Ruby (irb) …и десятки других.
  • 5. 5 Вот что делает REPL: while (noExit()) { print(eval(read())) } Если у языка нет REPL, то его, как правило, можно реализовать самостоятельно. (и это довольно просто)
  • 6. 6 Почему это так важно? s/Perl/любой язык xkcd #519
  • 7. 7 Почему это так важно? В изучении чего-либо очень важна быстрая обратная связь. Bret Victor — Inventing on Principle (https://vimeo.com/36579366) (есть субтитры http://geektimes.ru/post/183394/). Код ↔ Результат REPL предоставляет мгновенную обратную связь. Очень удобен в изучении языка, в экспериментах с библиотеками, для всяких вычислений …ну и просто по фану.
  • 8. 8 REPL в Node.js Можно: 1. работать с выражениями 2. подгружать модули (require()) 3. видеть все global-ы (нодовские: process, JS-ные: setTimeout, eval, Math, …) 4. неплохо форматировать вывод 5. делать автокомплит! 6. korovans.rob() $ node
  • 9. ? 9 Как что-то изучать: неинтерактивный режим интерактивный режим (REPL) $ node test.js нужно что-то поправить… $ node test.js а вот ещё… $ node test.js … $ node > скучный бойлерплейт … начинаем эксперименты… > …
  • 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 В ноде должно быть что-то подобное!… А вот и нет. https://github.com/nodejs/node-v0.x-archive/issues/3985
  • 12. 12 В ноде должно быть что-то подобное…? issue, конечно, закрыли :) но дали пару ценных советов require('repl').start({}) Стандартный нодовский REPL это по сути: Эту штуку можно неплохо прокачать и добавить в неё всё, что захочется.
  • 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 repl.js: Попробуем сделать REPL поприятней Попытка запилить флаг --interactive на произвольном коде поначалу не удалась (тогда я ещё не знал про vm). План Б: попытаться решить частный случай этой задачи, научиться подгружать модули и затем входить в repl. Парето доволен, 20% усилий дало 80% результата. $ repl.js path lodash Promise=bluebird ./file.js file=./other_file.js
  • 15. 15 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object. <Tab> // можно > object.pr <Tab> // можно > object.doStuff(). <Tab> // нельзя > object.prop. <Tab> // «как бы» можно Object.keys(target), Object.getOwnPropertyNames(target)
  • 16. 16 Пару слов про автокомлит Автокомплит — дело непростое. > var object = { … } > object.prop. <Tab> // «как бы» можно // но лучше не надо Object.defineProperty(object, 'prop', { get: function () { console.log('side effects!') return this._prop } })
  • 17. 17 Работаем с промисами Если выводить промисы в «сыром» виде, то получается белиберда. Вместо этого нужно дождаться, когда промис разрезолвится и показать его внутреннее значение.
  • 18. 18 Улучшаем вывод Для функций можно показывать их сигнатуры, вместо [Function]. Можно выводить код фукции целиком (src).
  • 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 Резюмируя REPL— это круто и полезно. Модуль repl можно использовать для создания интерактивных оболочек своих сервисов. Модуль vm позволяет запускать код в песочнице с контролируемым контекстом. repl.js это совместимый с repl модуль, который позволяет: 1. подгружать модули на старте 2. дожидаться ответа от промисов 3. красиво форматировать 4. показывать сигнатуры и сорцы функций 5. … и всё то же, что и стандартный repl
  • 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. Где мне можно написать: ● vk.com/StreetStrider Где можно меня почитать: ● github.com/StreetStrider ● habrahabr.ru/users/streetstrider/topics/ Что ещё я веду: ● vk.com/it.depot Frontend Meetup 22