Node.js Recipes
3.23K subscribers
173 photos
7 videos
1 file
610 links
Download Telegram
​​Node.js development in 2022: trends and techniques
#worth_seeing

Команда Fwdays викладають у публічний доступ відео з грудневої конференції. Серед них і моя доповідь про "Розробка на Node.js у 2022: тренди та прийоми". Я роблю такі доповіді щороку після релізу нової версії, щоб розповісти:
⚙️ нові фічі Node.js v16,
⚙️ нові мовні конструкції JavaScript/TypeScript
⚙️ фреймворки та підходи
Але головне в цьому огляді це відповіді на питання, як, коли і головне навіщо використовувати ці новинки.

Мова виступу російська

👀відео
📕Слайди
🔥48👍14
Конференції цього тижня:
#conferences

OpenJs World конференція від Linux Foundation. Пройде 7-8 червня. Багато доповідей різного рівня та тематики. Вважається найважливішою оффлайн тусовкою серед Core Node.js Contributers.
MongoDB World вендор конференція. Пройде 7-9 червня. Для конференції, присвяченої одному вендору, кількість контенту просто лякає.
WWDC 2022 конференція для розробників від Apple. Пройде 6-10 червня. Актуальність контенту для Backend розробників низька, але конференція в цілком важлива для індустрії.
👍14🔥8
Сьогоднішній рецепт присвячений #npm scripts
Щоб побачити їхній список треба запустити npm run. Так, без вказівки імені скрипту. Це дуже зручно у новому проєкт, коли ти ще не пам'ятаєш усіх скриптів.

А ось скрипти, які я рекомендую мати у кожному проєкті:
- watch чи start – запускає додаток для розробника, тобто зміни у коді рестартуют додаток
- format – виправлення помилок код-стайла за допомогаю prettier та eslint
- lint – перевірка код-стайлу за допомогаю prettier та eslint
- typing – перевірка за допомогаю typescript
- build – створює artifact (bundle у SPA)

Багато скриптів не потрібні, якщо знати про -- -argument. Наприклад,
замість debug, я використовую npm run watch -- -debug. Докладніше у
рецепті Тонкости работы с npm scripts
👍30🔥10
В рамках JS + React fwdays'22 яку з моїх тем вам було б найцікавіше послухати?
Final Results
33%
Protocols comparison for React App: Rest, GraphQL, WS, SSE, Binary
20%
How Design System can speedup delivery?
36%
Monorepo structure for Node.js + React app
10%
TypeScript for React Developers
👍7
Що таке Parameterized query у PostgreSQL?
#database

Використання template string під час створення SQL запитів може стати причиною SQL ін'єкції. Нехай у нас є такий код:
client.query(`INSERT INTO users(name, email) VALUES('${name}', '${email}') RETURNING *`);
Наприклад, порівняйте результати його виконання з
const name = 'Homer';
const email = 'homer@simpson.com';
та
const name = 'Hacker';
const email = "hacker@simpson.com'); DELETE FROM users --";
Звичайно, валідація вхідних даних може запобігти ін'єкції SQL. Однак правильно не використовувати у запитах JS змінні, а параметри.
Виправлений код виглядає так:
client.query('INSERT INTO users(name, email) VALUES($1, $2) RETURNING *', [name, email]);
Усі query builders генерують такі запити, а DB клієнти вміють із ними працювати.
👍40💯4
​​Can You Change the Behavior of a Running Node.js Process From the Outside?
#worth_seeing

Доповідач Vladimir de Turckheim показує як за допомогою дебаг протоколу змінити поведінку Node.js процесу. Так це hacking. Саме тому, деякі компанії для продакшену компілюють Node.js без модуля inspector.

👀відео
🔥10👍1
#list

Сьогодні у рекомендаціях добірка посилань You don't (may not) need. Якщо у вас на проєкті ще використовується moment.js, то я рекомендую почати з You don't (may not) need Moment.js. Для React розробників буде цікаво прочитати, чому їм може бути не потрібні Redux та React Router. Для Node.js розробників як завжди я рекомендую краще знати CLI.
🔥10👍93
Навіщо потрібне infer у TypeScript
#typescript

Ключове слово infer — це потужний інструмент, який дозволяє розгортати та зберігати типи під час роботи з чужим TypeScript кодом. Воно не може використовуватися без Conditional Types та поза пропозицією extends. Infer дозволяє визначити змінну в межах нашого обмеження, на яку буде посилатися або повертати.

наприклад, так можна отримати тип першого аргументу функції:
type GetFirstArgumentOfAnyFunction<T> = T extends (
first: infer FirstArgument,
...args: any[]
) => any
? FirstArgument
: never
Зверніть увагу, що описати це тільки через генерики неможливо.
👍23🤔12
Як виправити npm ERR! ERESOLVE could not resolve?
#npm

При встановленні залежностей можна часто побачити помилку:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
...
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

Відновлення залежностей не завжди варіант. Тому до Node.js 16.14 рекомендований спосіб був прописати legacy-peer-deps=true у .npmrc проекту або використовувати yarn resolutions. У Node.js 16.14 йде npm 8.3. Цей апдейт додав overrides, аналог yarn resolutions. Приклад використання в package.json для одного проекту React:
"dependencies": {
"react": "^18.1.0",
"react-dom": "^18.1.0",
"react-json-view": "^1.21.3"
},
"overrides": {
"react-json-view": {
"react": "18.1.0",
"react-dom": "18.1.0"
}
}

Рецепти на тему:
Що таке .npmrc і чому його варто додати?
Як виправити код у node_modules?
Тонкощі роботи з npm scripts
👍27
NestJS v9 is now available!
#nestjs

Сьогодні Каміль офіційно оголосив про реліз нової версії Nest.js.

Що нового:
– Nest.js REPL (read-eval-print loop). У певних випадках може бути заміною пакета nestjs-command та його аналогів. Зручно для troubleshoting-а вашої програми, але може створювати ризики безпеки в production через відсутність логування
– Спрощення роботи з динамічними модулями за допомогою ConfigurableModuleBuilder
– Durable providers полегшує роботу для multi-tenant додатків (наприклад коли кожна компанія має свою базу даних). Не варто використовувати у високонавантажувальних додатках
– Оновлення версії fastify та перехід на ioredis c redis

Перехід на нову версію виглядає простим за умови, що ви вже оновили @nestjs/typeorm на v8.1. Під капотом у цій версії йде оновленя typeorm v0.2 на v0.3. А там багато breaking changes. На місці Каміля я робив би цю зміну якраз у цьому мажорному оновленні.
👍391
За півгодини починаю свою доповідь React applications Failures.
Ще можна встигнути підключитися https://fwdays.com/event/react-fwdays-2022
Слайди https://speakerdeck.com/galkin/react-applications-failures
Youtube Stream https://www.youtube.com/watch?v=ima7RjDc6Fg

Update: Закінчив Discrod Voice Chat. Під час обговорення попросили поділитися посиланням на курс та сертифікацію (безкоштовну) з GraphQL.
https://www.apollographql.com/tutorials/
👍14
​​Why Monorepos?
#worth_seeing

Відео з OpenWorldJS 2022. Доповідач Jeff Cross працював у Google, а як ми знаємо саме там найкрутіший monorepo. Після Google Джеф співзаснував Nrwl. Ця компанія консультує з monorepo та Angular, а ще створила nx.

Доповідь складається з двох частин: ретроспективи переходу від monorepo до polyrepos та аналізу сучасного monorepos. Доповідь всього 20 хвилин, тому детальний аналіз краще почитати на сайті.

Посилання:
- Видео
- monorepo.tools
- nx.dev
- Nrwl is taking over stewardship of Lerna
👍18🔥5
Як прискорити eslint?
#cli #tooling
Чи довго працює eslint залежить від вашого проєкту та налаштувань eslint (включаючи правила, що використовуються).

1. Перевірте, чи eslint перевіряє лише потрібні файли. Раптом ви настроїли перевіряти node_modules? Щоб вивести всі файли, включаючи ті, де немає помилок, додайте в команду --format tap.

2. Перевірте чи не іде eslint вище по ієрархії і не мерджит конфіги з інших директорій, які ви не очікуєте.
Якщо забути поставити "root": true, можна довго дебажити що ж те так з конфігом

3. Налаштуйте, замініть або вимкніть довгі правила. Для їх знаходження запустіть змінну оточення TIMING=1. Приклад TIMING=1 npm run eslint. Докладніше в документації

4. Якщо все вище написане не допомагає, то час включати cache. Для цього додайте --cache. Ви можете зіткнутися з типовою проблемою кешування – коли скинути кеш або чому він порожній. Тому треба додати --cache скрізь, інакше eslint затиратиме кеш. Докладніше у документації

Update: Додав пункт 2. Дякую Євгену за коментар.
🔥23👍7
Як змінити модифікатор TypeScript?
#typescript

Версія TypeScript 2.8 додала можливість додавати або видаляти складовим типам модифікатори readonly та ?. Для цього використовують очевидні оператори + і -. Детальніше в документації. Приклад використання:

interface ReadOnlyTodo {
readonly title: string
readonly description: string
readonly completed: boolean
}
type Mutable<T extends object> = {
-readonly [K in keyof T]: T[K]
}
type MutableTodo = Mutable<ReadOnlyTodo>

Рецепти на тему:
- Як підтягнути TypeScript?
👍17😱3😁1
Коли використовувати npm ci?
#npm

Нагадаю npm ci або npm clean-install виконуватиме такі дії:
1. Видалить node_modules.
2. Встановити всі залежності з package-lock.json
На відміну від npm install, npm ci ніколи не змінюватиме ваш package-lock.json та викине помилку, якщо треба його змінити. Тому npm ci гарантую повторяємось.

В CI використовуйте npm ci та кешування node_modules або npm cache директорії (команда npm config get cache покаже де вона).

В Dockerfile використовуйте npm ci. Його слід роботи після копіювання package.json та package-lock.json але копіювання до js/ts файлів. Це треба для Docker layer caching.

При локальній розробці використовувати npm ci не принципово.
🔥29👍13
Які питання поставити, щоб перевірити розуміння REST?
#list

Давно не було переліку питань для інтерв'ю. Ви можете їх знайти за тегом #list. Сьогодні поділюся добіркою моїх питань для інтерв'ю щодо REST. Звичайно без відповідей, інакше як мені потім їх на співбесідах запитувати.

1. Опишіть структуру HTTP запиту та відповіді.
2. Розкажіть як працює кешування в Інтернеті.
3. У яких випадках, які групи статус кодів використовуються?
4. Що таке CORS? Для чого він використовується?
5. Що таке Etag? Для чого він використовується?
6. Які існують стандартні HTTP методи? У яких випадках, які ми використовуємо в REST?
7. Як надіслати заголовок, якщо тіло відповіді вже надіслано?
8. Чим відрізняються http1.1 та http2?
9. Спроєктувати REST API для todo list. Функціонал: створити завдання, завершити завдання, змінити опис завдання, видалити завдання, отримати список завдань, змінити порядок завдань, змінити категорію задачі.
10. Спроєктувати REST API для скорочення посилань. Функціонал: створити нове коротке посилання, відкрити посилання, переглянути аналітику за посиланням, видалити посилання.
👍38🔥10🤔3🥰1😁1
Сьогодні в рекомендаціях два відео з Google I/O 2016 присвячені Firebase RealTime DB. У деяких випадках не варто створювати своє API, а краще використовувати цю базу. Наразі вже є Cloud Firestore, але концепції з відео не втрачають своєї актуальності.
#worth_seeing
👀 Deep Dive into the Realtime Database
👀 The key to Firebase security
👍5
​​Поділюся досвідом використання transform.tools. Частіше всього я використовую JSON To #TypeScript. Після трансформації можуть знадобитися правки, наприклад, додати enum. Приклади використання:
– додати інтерфейс події для Google Cloud Function. В ідеальному світі це вже повинно бути в SDK.
– описати інтерфейси запитів і відповідей для інтеграції зі стороннім API, у якому є текстова документація, але не специфікація. Якби була специфікація, наприклад Swagger, то правильно було б створити типи з неї.

Простий інструмент, який може заощадити час, тож про нього потрібно пам'ятати.
🔥21👍51🤮1
Що таке Event Loop Delay?
#nodejs_api

Node.js може обробляти одночасно кілька запитів. За це відповідає Event Loop. Синхронний код (require('fs').readFileSync) або підвищене споживання CPU (обробка великого JSON) гальмуватиме Event Loop. Для вимірювання, наскільки це відбувається, використовується метрика Event Loop Delay. Наприклад, якщо якісь endpoint блочить Event Loop Delay на 100ms, то процес не може опрацювати більше 10 таких запитів на секунду. Приклад

Чим можна вимірювати:
– існує Node.js апі perf_hooks.monitorEventLoopDelay
– це частина метрик у pm2
prom-client та його аналоги теж збирають цю метрику
👍26🔥9
У друзів каналу новина: корпоративний центр навчання NIX розпочинає набір на безкоштовну освітню програму FrontEnd + JavaScript.
Курс ідеально підійде студентам і розробникам-початківцям. Ще є курси з Java, .Net, QA.
Формат — онлайн.
Старт — кінець серпня – вересень.

Більше деталей та реєстрація тут
👎6