TGViewer
Channel Public Channel
Node.js Recipes

Node.js Recipes

@node_recipes

Subscribers
3.1K
Photos
173
Videos
7
Links
610

Showing posts older than #467 · Back to latest

Older Posts 20 shown
Post #466 2.26K
За півгодини починаю свою доповідь 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
Post #465 2.3K
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. На місці Каміля я робив би цю зміну якраз у цьому мажорному оновленні.
  • 👍 39
  • ❤ 1
Post #464 2.34K
Як виправити 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
Post #463 2.19K
Навіщо потрібне infer у TypeScript
#typescript

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

наприклад, так можна отримати тип першого аргументу функції:
type GetFirstArgumentOfAnyFunction<T> = T extends (
first: infer FirstArgument,
...args: any[]
) => any
? FirstArgument
: never
Зверніть увагу, що описати це тільки через генерики неможливо.
  • 👍 23
  • 🤔 12
Post #462 2.64K
#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
  • 👍 9
  • ❤ 3
Post #461 2.62K
​​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
Post #459 2.83K
Що таке 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
Post #458 3.36K
  • 👍 7
Post #456 2.81K
Сьогоднішній рецепт присвячений #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
Post #455 2.52K
Конференції цього тижня:
#conferences

– OpenJs World конференція від Linux Foundation. Пройде 7-8 червня. Багато доповідей різного рівня та тематики. Вважається найважливішою оффлайн тусовкою серед Core Node.js Contributers.
– MongoDB World вендор конференція. Пройде 7-9 червня. Для конференції, присвяченої одному вендору, кількість контенту просто лякає.
– WWDC 2022 конференція для розробників від Apple. Пройде 6-10 червня. Актуальність контенту для Backend розробників низька, але конференція в цілком важлива для індустрії.
  • 👍 14
  • 🔥 8
Post #453 2.96K
​​Node.js development in 2022: trends and techniques
#worth_seeing

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

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

👀відео
📕Слайди
  • 🔥 48
  • 👍 14
Post #452 2.6K
​​Сьогодні порекомендую чудовий інструмент для візуалізації процесів. Називається BPMN (Business Process Model and Notation). Можна використовувати як для опису бізнес-процесів, так і flow в мікросервісній архітектурі. Добре допомагає побачити проблемні місця – не правильне місце виконання, послідовність тощо.

посилання:
– https://bpmn.io/
– https://www.bpmn.org/
– https://github.com/bpmn-io/bpmn-js
  • 👍 30
  • ❤ 8
Post #451 2.43K
Я тільки вчора додався у waitlist, а сьогодні вже прилетіло запрошення на бета-тест. У кінці місяця поділюся враженнями.
GitHub Copilot це плагін для IDE (WebStorm/VSCode/etc) який за допомогою AI перетворю англомовні коментарі у код. Більше інформації та реєстрація на бета-тест за посиланням
👉 https://copilot.github.com/
  • 🔥 25
  • 🤔 7
  • 👎 2
  • 👍 1
Post #450 2.51K
TL;DR; Помилка у await someAsyncFn().catch() створює Unhandled Promise Rejection, тобто аргумент у catch() є обов'язковим.

Я вже розповідав про Floating Promise. Вони створють Unhandled Promise Rejection. Щоб знаходити такі проблеми я використовую @typescript-eslint/no-floating-promises. Це правило говорить, щоб не було Floating Promise треба зробити одне з:
– await цього promise-а
– return цього promise-а
– додати до цього promise chain .then() з двома аргументами
– додати до цього promise chain .catch() з одним аргументом

Я вважав, що try catch та catch у promise chain працюють однаково. Тому для мене було несподіванкою, що await someAsyncFn().catch() не перехоплює помилку, що створює Unhandled Promise Rejection. Так само станеться якщо аргумент у catch буде null або undefined. Catch це синтаксичний цукор then(undefined, cb). Змінюючи цей cb ми контролюємо поведінку promise chain, тому cb не є обов'язковим.

Для мене це виглядає, як бага у @typescript-eslint/no-floating-promises. Як тимчасове рішення я додав таке правило:
'no-restricted-syntax': [
'error',
{
selector: "CallExpression[callee.property.name='catch'][arguments.length!=1]",
message: 'Catch should have exactly one argument'
}
],

PS Велика подяка Віктору та Олексію за коментарі.
  • 👍 44
  • 🤔 3
Post #449 2.2K
6-10 червня запрошуємо долучитися до тижня онлай-мітапів Grammarly Tech Week #StandWithUkraine!

Усі події Grammarly, як завжди, безкоштовні. Ми будемо вдячні учасникам за будь-який внесок до фонду чи організації (кілька варіантів можна знайти за посиланням https://gram.ly/GTWUkraine), які підтримують Україну. 🇺🇦

📢Протягом тижня щовечора експерти з інженерних та продуктових команд ділитимуться досвідом і розповідатимуть більше про підходи до розробки та тестування у Grammarly!

Реєструйтесь і долучайтесь до подій:
🗓7 червня: The Story of Declarative React at Grammarly - Як команді Grammarly Editor вдалося побудувати архітектуру з імплементацією Declarative React компонентів, з якими технічними викликами вона зіткнулася під час реалізації та яким чином сформувала нову UI бібліотеку “Embrace”. Усе це обговоримо на зустрічі з Grammarly Software Engineer Олександром Сугаком.
Реєстрація: https://gram.ly/3LyPYAI

🗓9 червня: How We Test at Grammarly: General Processes and Reactive Code Testing - Grammarly Software Engineers Олексій Левжинський та Денис Кашковський розкажуть про те, як ми тестуємо в Grammarly, для чого потрібні Marble-тести і як вони покращують якість тестування.
Реєстрація: https://gram.ly/3Nu3FlH

Мова доповідей: англійська.

Більше івентів Grammarly Tech Week шукайте за посиланням: https://gram.ly/3wZGCsl.

До зустрічі!
  • 👍 18
Post #444 4.07K
Post #443 5.62K
Мой коллега Vitalii Ruban, с которым мы вместе были в программном комитете JSFest, делает Free React Course For Beginners. Подробности в канале @reactbeginners.
  • 👍 26
  • ❤ 1
  • 👎 1
Post #442 7K
Вчера в TypeScript блоге появилась заметка A Proposal For Type Syntax in JavaScript. На текущий момент пропосал находиться на Stage-0. Его идея убрать обязательный этап компиляции TS в JS с помощью TypeScript/Babel.

Еще в блоге были Release Notes TypeScript 4.6.
  • 👍 69
  • 🤔 4
Post #432 3.95K
Куда развивается Reactive Programming в Node.js?

TL;DR; С выходом 18-й LTS версии встроенные Node.js Streams станут альтернативой RxJS.

Начну с определения: реактивное программирование – это парадигма программирования ориентированная на потоки данных. Т.е. вместе операций над статическими данными, мы оперируем потоками. Упрощенно говоря, поток данных это массив, где каждый элемент имеет привязку к временной оси.

В javascript комьюнити основной тренд реализации реактивного программирования это RxJS. Основной драйвер это развития Angular. Nest.js, созданный на его основе, работает с RxJS из коробки. Так Interceptors построены именно на RxJS.

Реализовывать подходы реактивное программирования на чистых Node.js Streams требует много самописного кода или использование библиотек, которые не так развиты/поддерживаются как RxJS. Однако в 16.14.0 версии Node.js были добавлены filter и map для работы с Readable Streams. В экспериментальной ветке (17-ой) реактивных методов больше:
– readable.forEach(fn[, options])
– readable.toArray([options])
– readable.some(fn[, options])
– readable.find(fn[, options])
– readable.every(fn[, options])
– readable.flatMap(fn[, options])
– readable.drop(limit[, options])
– readable.take(limit[, options])
– readable.asIndexedPairs([options])
– readable.reduce(fn[, initial[, options]])

До выхода 18-й версии в LTS, что произойдет в октября 2022, их станет больше. Надеюсь, их Stability Index переведут из экспериментального в стабильный.
  • 👍 36
  • 🔥 14
  • 👎 1
  • 🤔 1
Post #431 4.03K
Какие вопросы задать, чтобы проверить понимание Nodejs perfomance?
#list

Сегодня поделюсь подборкой моих вопросов для интервью по работе с оптимизацией Node.js perfomance. Естественно без ответов, иначе как мне потом их на собеседованиях спрашивать.

1. Какие метрики Node.js процесса вы используете? Как их собираете?
2. Что такое Еvent Loop Latency? Как он рассчитывается?
3. Покажите в вашем коде где вы конфигурируете database connection pool? Как он работает и за что отвечает?
4. Какие способы измерения latency http ответов вы знаете?
5. Каким образом вы определяете bottleneck в вашей системе в целом? А в коде?
6. DevOps команда выдвинула гипотезу, что приложение тормозит из-за логирования. Каким образом вы будете проверять эту гипотезу?
7. Назовите способы ускорения Node.js приложения, которые вы использовали.
  • 👍 30
  • 😱 3
  • 🔥 1
  • 🥰 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →