Node.js Recipes – Telegram
Node.js Recipes
3.22K subscribers
167 photos
7 videos
1 file
614 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Как работать с Event Emitter в async/await стиле?
#nodejs_api

В 2022 году асинхронных #nodejs код строиться на async/await. Однако важный модуль Event Emitter построен на callback-ах. Начиная с 12.16 версии в нем есть встроенный функционал для упрощения работы с Promise. За это отвечают две функции:
events.on(emitter, eventName[, options]) – возвращает AsyncIterator, который легко итерировать конструкцией for await
events.once(emitter, name[, options]) – возвращает Promise, который будет разрешен по событию.
В 16 Node.js добавили options для передачи AbortController.

Упрощенный пример кода демонстрирующий обе функции:
const events = require('events');
const { setTimeout } = require('timers/promises');
const server = require('http').createServer();

async function handle(req, res) {
await setTimeout(200);
res.end('Hello World');
}

async function bootstrap() {
server.listen(8080);
await events.once(server, 'listening')
for await (const [req, res] of events.on(server, 'request')) {
await handle(req, res);
}
}

bootstrap();

⚠️В пример await handle, сделано для демонстрации работы AsyncIterator. В результате такой конструкции HttpServer будет обрабатывать запросы не параллельно, а последовательно. Чтобы это исправить можно убрать await на этой строке.

Ссылки:
⚙️ Код на runkit
📕 Документация events
👩‍🍳 Обзор AbortController
👍18👎1
Подборка книг для изучения JavaScript
#list

Сегодня у нас в рекомендация свежие книги от Axel Rauschmayer. Он ведет блог 2ality.com с обзором новинок в JavaScript. На его сайте exploringjs.com можно прочитать его книги:
📕JavaScript for impatient programmers (ES1–ES2021), книга освещает новые фичи языка включая ES2022. Есть упражнения для закрепления.
📕Deep JavaScript: Theory and techniques (ES1–ES2021) углубление использование языка.
📕Tackling TypeScript: Upgrading from JavaScript альтернатива The TypeScript Handbook для изучения TypeScript.

Другие подборки книг на канале:
- Подборка книг для изучения TypeScript
- Подборка книг для прокачки, когда ты уже Senior
👍25
Live stream scheduled for
Audio
#voice_chat About Conferences с Alexander Makhomet. Александр co-founder в компании Fwdays которые уже более 10 лет проводят tech events в Украине. Также Александр сотрудничает с компанией Upwork на позиции Engineering Lead, и является кофаундером проекта Ergo.Place. В середине чата к нам присоединилась Ирина Божик, CEO Fwdays.

Вопросы:
Как организован процесс отбора тем и докладчиков?
Отличие организаций онлайн, оффлайн и гибрид конференций?
Альтернативные форматы: пубталкс, антиконференции, воркшопы
Как организована работа с комьюнити?

Интересны ссылки упомянутые в разговоре:
- Завирусившийся доклад Саши Соловьева в 2013
- Fwdays Tech Talks
4
Как просто улучшить работу с git?
#git #cli
TL;DR установите git-extras

Я предпочитаю работать с git через командную строку, а не в IDE. Одна из причин прокачка git с помощью external commands, о которых я уже писал. Лучшим набором таких команд является git-extras.

Мои наиболее часто используемые команды:
git undo – отмена последнего коммита
git undo N  – отмена последних N коммитов
git abort – отмена текущего rebase, merge или cherry-pick.
git browse – аналог вышеназванного git open. Откроет в браузере страницу репозитория (github, gitlab).
git effort --above 5 – узнать какие файлы менялись больше чем в 5 коммитах. Удобно при анализе нового проекта

Начать использовать можно тут.

Рецепты по теме:
- Как автоматизировать работу с git?
- На что влияет environment variable EDITOR?
- Как и что настроить в git?
👍32
​​GitHub Actions
#worth_seeing

Сегодня в рекомендациях несколько видео об GitHub Actions с GitHub Universe 2021.

Я активно использую их на своих проектах и считаю, что это отличный инструмент с очень легким порогом входа.

👀GitHub Actions in action – начальный уровень
👀Advanced GitHub Actions – продвинутое использование
👀Deploying to AWS with GitHub Actions – строим законченный pipeline
👀Empathy at scale: Techniques for user automation on one of the most active repos – как работает с GitHub action TypeScript команда.
👀Все видео с GitHub Universe 2021
👍17
​​How many hats should a DevRel wear?
#worth_seeing

Существует такое понятие как DevRel (Developer Relations). Упрощено говоря это PR в мире разработки. Инфлюенсирами в DevRel принято называть Developer Advocate.

Сегодняшнее видео с конференции DevRelCon 2021. В нем Zan Markan, Developer Advocate из Circle CI разказывает о ролях в DevRel. Видео отлично позволяет понять, в чем же заключаются ежедневные действия DevRel.

Ссылки:
👀Видео
👀Все видео с DevRelCon 2021
👉What is developer relations? от организатора DevRelCon
👍7🔥1
Тонкости работы с npm noscripts
#cli #npm

1️⃣ pre- post- noscripts
Для ежедневной работы JS часто использует автоматизацию с помощью npm noscripts. У них есть pre- post- noscripts, т.е. скрипты автоматически вызваны до или после скрипта. Например, так можно перекомпилить тайпскрипт перед запуском: "prestart": "npm run build". На канале уже был рецепт об postinstall идет в связки с пакетом patch-package.

Для выключения работы этих скриптов необходимо установить флаг ignore-noscripts в .npmrc или командой:
npm config set ignore-noscripts true

2️⃣ Использование --
Для добавления аргументов в npm noscript используется --. Например, в проекте есть команда "test": "jest". Команда npm run test -- -t="Example" запустит jest -t="Example", то есть только тесты с названием Example. Это работает только основной команды, но не для pre-/post-.

3️⃣ Работа с PATH
В npm скриптах не нужно прописывать путь к исполняемым файлам, хранимых в ./node_modules/.bin. Npm в момент запуска скрипта расширяет переменную PATH. Это идею можно расширить и в другую сторону, то есть сделать:
export PATH="$PATH:./node_modules/.bin"
После чего можно запускать установленный npm пакеты как из скриптов. Удобно для редких команд, которые не имеет смысла тащить в npm noscripts.

Рецепты по теме:
​​Что такое .npmrc и почему его стоит добавить?
Как исправить код в node_modules?
👍15😱1
Как узнать является ли текущий файл точкой запуска?
#nodejs_api

Точка запуска (entry point) это файл, который указывается в качестве аргумента в команде node file_name.js. Зачем знать является ли текущий файл точкой запуска? Чтобы правильно организовывать код. Например, вы можете стартовать web server или экспортировать его для последующего использования в тестах.

Для проверки с CommonJS (стандарт в Node.js) используется require.main или его аналог process.mainModule. Пример, кода:
if (require.main === module) {
console.log('Entry point');
} else {
console.log('Not entry point');
}

Для ES модулей код выглядит так:
import { fileURLToPath } from 'url';
if (process.argv[1] === fileURLToPath(import.meta.url)) {
console.log('Entry point');
} else {
console.log('Not entry point');
}
👍29
Какие инструменты упрощают парное программирование?
#list

Extreme Programming (XP) предлагает использовать парное программирование для передачи знаний. В традиционном подходе это предполагает работу вдвоем за одним компьютером. С расцветом удаленки правила поменялись. Вот список инструментов, которые упрощают возможность вдвоем запрограммировать новую фичу или пофиксить баг.

1️⃣Main trend: ScreenSharing в любом видео звонке. В некоторых программах (Zoom, Slack) можно подчеркивать места на экране. Не хватает возможности набирать текст второму пилоту.
2️⃣Developer-friendly, т.е. интеграция в IDE. Примеры: Code With Me от JetBrains и Live Sharing для VisualCode. Требует использования одной и той же IDE в команде.
3️⃣Classic: TeamViewer – лучший вариант для решения проблем во время поддержки пользователей.
4️⃣Old school: tmux или tmate для того, чтобы поделиться терминалом, в том числе текстовым редактором vim/nano. Отлично подходит DevOps-ам для поиска проблем.
5️⃣The future is here: То к чему идет индустрия это browser-based IDE. Примеры: GitHub Codespaces, AWS Cloud9, GCP Cloud Shell. Пока у них нет возможности поделиться сеансом, но уверен она появиться.
🔥11👍2
#announcement

Завтра #voice_chat будет About Nest.js. В гостях Михаил Яли, Software Architect в компании Trilon, автор библиотеки nestjsx/crud.
Когда: в четверг, 27 января, в 21:00 по Киеву
Где: https://news.1rj.ru/str/node_recipes?voicechat

Агенда:
– Как связаны Trilon и Nest.js
– Лучшие Nest.js практики
– Обучение Nest.js: с чего начать
– Nest.js экосистема

До встречи в эфире!
🔥35👍1
Live stream scheduled for
​​Что такое RegExp Named Capture Groups?

Регулярные выражения это сложно. Их чтение требует больших когнитивных усилий. Чтобы это упростить созданны Named Capture Groups.

Сравните две регулярки:
1️⃣/(\d{4})-(\d{2})-(\d{2})/
2️⃣/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
Блоки внутри круглых скобок называются capture groups. Во второй регулярке они именованные. Работают они одинаково, но после у второй после вызова exec будет поле groups, смотри картинку или пример на runkit.

Еще именнованные группы можно использовать в replace. Пример:
"prefix-example".replace(/prefix-(?<value>.*)/, '$<value>')

В eslint-plugin-regexp существует правило regexp/prefer-named-capture-group, которое форсирует использование именнованых груп.
👍32
В начале 2015 я приехал из Донецка в Киев. В то время я работал фрилансером. План был за месяц подготовиться к переезду в Черногорию: снять деньги, поменять ноут увидеться с друзьями. Один из них задал вопрос, а почему не поменять фриланс на работу в галере. Устав от ежедневного поиска клиентов я поменял удаленку на офисную стабильность и задержался в Киеве на 6 лет. В прошлом году я наконец-то отправился на зимовку в теплые страны. Сейчас у меня идет вторая зимовка в Доминикане.

Если бы жизнь сложилась по моему первоначальному плану, уверен я бы познакомился с Рубеном, чей проект я вам хочу пропиарить. Да это #реклама. Он разработчик, который живет в Черногории больше 7 лет. За это время помощь друзьям с onboarding-ом в эту страну превратилась в бизнес.

Рубен создал в Черногории IT HUB. Миссия Хаба помогать разработчикам и компаниям осваивать Черногорию, предоставить как место и возможность для коллег, куда можно приехать сменить обстановку, отдохнуть или даже релокейтнуться.

Если мне было удобней работать по европейской таймзоне, я бы обязательно воспользовался услугами хаба. Опыт самостоятельной организации зимовки в Доминикане показал, что выгоднее заплатить за опыт деньгами, чем нервничать от собственного незнания и сделанных ошибок.

Узнать подробности:
@codeforgesHubBot
hub.codeforges.com
- в Инстаграм https://www.instagram.com/p/CZM0YZzNvPy/
– или задать вопросы в комментариях. Рубен обещал туда заглянуть.
👍152
Audio
#voice_chat About Nest.js.
В гостях Михаил Яли, Software Architect в компании Trilon, автор библиотеки nestjsx/crud.

Агенда:
– Как связаны Trilon и Nest.js
– Лучшие Nest.js практики
– Обучение Nest.js: с чего начать
– Nest.js экосистема

Ссылки, о которых говорили во время чата:
- https://github.com/nestjsx/crud
- https://discord.com/invite/nestjs
- https://marmelab.com/react-admin/
- https://refine.dev/
👍18🔥9
Топ-5 заблуждений об работе JavaScript
#nodejs_api

На календаре пятница, а значит пора сбавить градус практичности. Сегодня поделюсь "перлам" с собеседований. Цель поста – ликвидация безграмотность.

👎Все логические операторы (&&, ||, !) возвращают булевы значения.
Вообще-то только ! возвращает Boolean.
Вопрос для выявления заблуждения, что будет выведено: console.log('0' && 3)

👎Расчет возвращаемого Promise-ом значения будет запущен при await.
Нет, он будет запущен в момент создания, т.е. как только мы создали Promise мы сразу запустили цепочку (promise chain). Где вы ставите await, и ставите ли, не имеет значения.

👎Все аргументы в функциях работают одинаково.
Как и в других языках программирования примитивные и ссылочные типы ведут себя по разному.
Вопрос для выявления заблуждения, что плохо в коде:
function getTomorrow(d) {
d.setDate(d.getDate() + 1);
return d;
}

👎Обработка событий происходит асинхронно.
Ошибка характерна и для Node.js с Event Emitter, и для FE разработчиков с Browser Events. Event handler-ы работают синхронно, причем их порядок вызова зависит от порядка добавления.

👎JavaScript обладает идеальной точностью арифметики.
Уже столько раз писали, о том что 0.1 + 0.2 == 0.3 это false, что многие это зазубрили. Однако, об этом забывают в доменах, где ошибка округления критична (финансы и т.п.). В таких случаях стоит использовать BigInt или подобные решения.
👍19🔥19
Chrome 98 - What’s New in DevTools
#worth_seeing

1 февраля будет следующий релиз Chrome. В нем будет много обновлений в инструментах разработчика. Чтобы быть в курсе предлагаю посмотреть 6 минутное видео или почитать текстовое описание.

Большинство новшеств орентированы на фронтенд разработку. Для #nodejs и fullstack разработчиков будут интересны:
👉 Back/Forward cache tab, чтобы убедиться что сервер отдает правильные заголовки
👉 связка document.designMode + Changes tab, чтобы отредактировать прямо в браузере и скопировать в исходный код.

Ссылки:
👀Видео
📕Текстовая версия
🔥11👍21
​​What’s Next for the GraphQL Spec?
#worth_seeing #graphql

Сегодня в рекомендациях видео с GraphQL Summit - November 2021. Из всех видео с конференции я выбрал именно его по следующим причинам:
– Объяснение истории развития спецификации и текущего процесса ее обновления.
– Новинки в спецификации за октябрь 2021
– Для GraphQL cпецификация особенно важна, так как реализация клиентов и серверов делают на многих языках и платформах.
– Один из докладчиков Иван Гончаров, core maintainer graphql-js.

Ссылки
👀Видео
📕Спецификация
👉Полный плейлист GraphQL Summit - November 2021
👍3
List of 1000 JavaScript Interview Questions
#list

Сегодня в рекомендациях большая подборка вопросов для JS-интервью с ответами. Список содержит как открытые вопросы, так и тесты на понимания работы кода. Некоторые вопросы морально устарелы, но в целом репозиторий можно рекомендовать для подготовки к собеседованию на JS позицию.
👍28
Подборка node.recipes за январь 2022
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Что такое WICG?
➡️ Как TC39 предложения внедряются в TypeScript?
➡️ 15 Factor App
👉 Больше 100 share: Какие вопросы задать, чтобы проверить понимание Promise/async/await?
​​➡️ oclif.io – Open CLI Framework
➡️ Когда и как использовать navigator.sendBeacon?
➡️ 2021 JavaScript Rising Stars.
➡️ Как использовать assert для улучшения читабельности кода?
​​➡️ Как запустить Recorder в Chrome?
👉 Больше 100 share: Подборка книг для изучения TypeScript
​​➡️ Обновление Open Machine Learning Course
➡️ Как отследить работу Garbage Collector?
➡️ Как работать с Event Emitter в async/await стиле?
➡️ Подборка книг для изучения JavaScript
➡️ Как просто улучшить работу с git?
➡️ Тонкости работы с npm noscripts
➡️ Как узнать является ли текущий файл точкой запуска?
➡️ Какие инструменты упрощают парное программирование?
​​➡️ Что такое RegExp Named Capture Groups?
👉Больше 100 комментариев: Топ-5 заблуждений об работе JavaScript
➡️ List of 1000 JavaScript Interview Questions

Стоит посмотреть:
👀​​Road to production
​​👀Application integration patterns for microservices
👀Advanced TypeScript Playlist by Basarat
👀Create an Application Backend in Clicks with the Amplify Admin UI
👀llhttp - new HTTP 1.1 parser for Node.js
​​👀Testing Pyramid Makes Little Sense, What We Can Use Instead
👀GitHub Actions с GitHub Universe 2021
👀​How many hats should a DevRel wear?
👀Chrome 98 - What’s New in DevTools
👀​What’s Next for the GraphQL Spec?

Стоит послушать или прошедшие Voice chat:
🎤About Best Practices, в гостях Алексей Бобырь
🎤About Software Engineering, в гостях Тимуром Шемсединовым
🎤About Conferences, с Александр Макхомед и Ирина Божик
🎤About Nest.js, с Михаилом Яли

Анонсы конференции:
👍​​Node Congress
👍TheJam.dev
👍33🔥5
В конце сентября я писал о том, что сделал для Foxminded курс по #nodejs. Подход к составлению курсов в компании – фокус на практику без разжевывания теории, которую гуглят только когда больно. Курс окончил бета тестирование и обзавелся лендингом.

После составления курса я сопровождаю менторов и даже вел пару студентов. Отзыв одного из них:
Вообще сейчас твой курс реально выглядит как одна из лучших инвестиций в самообразование за долгое время — разумная порция боли и хорошее ощущение прогресса 🔥

Курс ориентирован на новичков в Node.js. Идеально подходит для Frontend разработчиков, которые хотят стать FullStack.
👉Запись на курс тут