Node.js Digest #15: Javascript втрачає позиції, Express 5, Node.js 23, JSSugar та JS0, Microsoft та 178GB monorepo
Привіт, спільното! На зв’язку Олександр Зіневич, Engineering Director в Avenga. Трішки був зайнятий цим та цим, тому дайджест виходить трошки пізніше. Перепрошую за такі незручності та запрошую ознайомитись із тим, що ж там відбувалось у світі серверного JavaScript впродовж жовтня.
Коротко про головне
Сумно, але згідно із даними Github — JavaScript більше не найпопулярніша мова, її обігнав Python. Мусимо всі разом виправити цю ситуацію до наступного року ;)
Можливо, відвойовувати позиції JavaScript нам допоможуть інструменти ШІ, а саме — Claude AI. Який тепер вміє не тільки генерувати код на JavaScript, а й частково виконувати його. Про це вже писали тут і тут.
Традиційні оновлення Node.js. Node.js v22.11.0 отримала статус LTS, додаткових змін у порівнянні з v22.10.0 немає. Також вийшла версія Node.js v23 у якій остаточно забрали підтримку
MongoDB v8.0 — у новій версії додали купу всього різного з безпеки, агрегації даних, шардінгу та реплікації. Якщо ви вагаєтесь, яку ж базу використовувати для нового проєкту, то ось коментар від команди Mongo — про те, чому саме MongoDB v8.0 може бути хорошим вибором.
Serverless-express v.4.16.0 — сюди нам завезли підтримку Express v5.
TypeScript v5.7 beta — з цікавого: покращена перевірка на змінні, які не були ініціалізовані, і покращення до роботи з tsconfig.json-файлами.
Express 5
Більш ніж 10 років тому було відкрито PR з Express 5, а епопея з новою версією триває і далі. Express 5 наче зарелізався, а наче і ні 🫠
Нещодавно команда опублікувала прес-реліз, у якому трішки розповіла про те, що відбувається із новою версією фреймворку та куди це все рухається.
Спробувати Express v5 можна, використовуючи next-тег. Таке рішення команда прийняла, щоб, з одного боку, викотити вже цей реліз хоч якось для спільноти. З іншого — щоб оживити процес підтримки та роботи над проєктом згідно з останніми практиками в open-source проєктах такого масштабу.
Крім пояснень, що відбувається із фреймворком, та чому реліз виглядає саме так, як він виглядає, трішки розповіли про зміни, що нас очікують. А саме — призупинення підтримки старих, як світ, версій Node.js до 18, покращення до body-parser та path-to-regexp тощо.
Тішусь, що проєкт оживає, але чи може він з улюбленця легасі-систем перейти у гідного конкурента сучасних фреймворків, покаже лише час.
JS0 чи JSSugar — хто головний
Хто не чув, нещодавно від Google прилетіла пропозиція розділити JS на дві частини. Гадаю коли ви це читаєте, то відчуваєте такий самий подив та нерозуміння цієї пропозиції, як спершу відчував і я. Крім цього мені згадався трохи давній мем з передвиборчої кампанії в мери про «є два Львова», але сумніваюсь, що автори цієї пропозиції керувались саме цим.
Ви не подумайте, все досить серйозно. Ось тут є невеличкий пост, а також ціла презентація цієї ідеї з поясненнями та аргументацією, чому це важливо. Один з основних аргументів — розвиток мови створює сильний тиск на команду з розробки рушія V8. Яка замість того, щоб робити все кращим для кінцевих користувачів, змушена гнатись за примхами розробників.
Щоб цього уникнути,пропонується розділити JavaScript на JavaScriptSugar так JavaScript0. Для кінцевих розробників все мало б лишитись без змін, оскільки JavaScript = JavaScriptSugar + JavaScript0, де JavaScriptSugar це якраз усі останні фічі JavaScript, які мають потім компілюватись у той JavaScript0, який підтримується рушіями за допомогою додаткових інструментів типу Webpack тощо.
З одного боку ця ініціатива є ніби нічим більшим, ніж просто намагання явно зафіксувати те, що зараз відбувається із JavaScript. З іншого — аргументація трохи слабенька. Може, краще дивитись в сторону WebAssembly? Схоже, такі ж розбіжності відчуває багато хто зі спільноти. Це вилилось у палку дискусію тут.
Чим все закінчиться і чи буде в нас два Львови, ой, тобто JavaScript-и, зможемо побачити вже дуже скоро.
Страшилки про npm
Оскільки недавно був Гелловін, хотілось би вас трішки полякати, а полякати я можу хіба новими страшними історіями з npm-у. Команда Socket у своєму блозі розповіла про да кейси шкідливих пакетів на npm, які крали особисту інформацію чи й взагалі могли її знищити.
Цікавим є другий випадок, де за парсингом кукі був прихований функціонал з видалення даних, який спрацьовував не відразу, а лише за годину. Те, як саме цей код був прихований, заважало автоматизованим системам зловити шкідливість цього пакету.
Будьте обачні та завжди використовуйте перевірені пакети, а не щось, що буде експлуатувати вашу довіру до npm та допомагати поганим хлопцям робити погані справи.
Як вийти з ІТ Хмари
Традиційна рубрика не зовсім про Node.js. Кілька тижнів тому у своєму персональному блозі засновник 37Signals David Hansson розповів трішки деталей про те, як переїзд з Хмари на власні сервери потенційно зекономить їм 10 мільйонів доларів.
Звісно, на розмірі та користувацькій базі їхніх проєктів такий перехід більш ніж логічний. Бо можуть інвестувати у розгортання та підтримку власної інфраструктури, що допоможе економити надалі. Тут можна почитати про мотивацію команди та те, як була організована міграція.
JavaScript monorepo розміром 178GB
Чи уявляєте ви собі такий репозиторій? 178GB — це розмір усіх серій «Гри Престолів» в доволі непоганій якості, або JavaScript monorepo Microsoft, яке містить кодову базу для багатьох їхніх популярних та не дуже продуктів. Звісно, можете накидати приколів про Microsoft у коментарях, але проблема цікавіша.
У своєму блозі Jonathan Creamer поділився тим, як їхній monorepo-репозиторій спершу виріс до розміру 178GB, а потім був героїчно зменшений до 5GB через особливість роботи Git, яка була закладена ще самим Linus Torvalds.
Детальніше про те, як уникнути такого на вашому проєкті, можете почитати тут.
Щось почитати
Одні з ключових технічних експертів, що працюють із JavaScript на сервері, зібрались і сформулювали дуже круту збірку принципів для розробки застосунків на Node.js. Особливо такі матеріали будуть корисні тим, хто переходить в Node.js з іншої технології.
А ось просто досить велика добірка різних ресурсів, де можна почитати про архітектуру програмного забезпечення.
Більшість з вас чули про цю розрекламовану сумісність Bun з Node.js. Як саме така сумісність була досягнути, команда Bun розповідала не дуже багато. Натомість у своєму блозі розробники опублікували матеріал про те, як будували підтримку V8 API. Зважаючи на те, що V8 не використовували.
А тут трішки про таймзони в Node.js.
Я вже згадував у своїх дайджестах про фреймворк Hono. Нещодавно про нього детальніше розповів власне сам автор. Чому варто розглянути Hono, в чому його особливість та що робити, якщо ви хотіли б мати гнучкість у роботі з різними середовищами виконання JavaScript — зможете почитати саме у цій статі.
Писати свої велосипеди — не завжди гарна ідея, але завжди цікава. Потрібно розуміти, як ті велосипеди повинні працювати. У своєму блозі Robin Wieruch розповів, як можна будувати власну систему аутентифікації.
Чому переписувати існуючий проєкт на щось нове і трендове, як-то Rust, не завжди гарна ідея, розміорковує Nolan Lawson.
Невеличкий туторіал від Timescale: як зробити функціонал з пошуку картинок. Звісно, в пості є промоушн їхніх продуктів, але загалом цікаво ознайомитись із підходом.
Якщо ви, як і я, сумніваєтесь, що ШІ незабаром замінить усіх нас, почитайте цю невеличку нотатку від Google. Вона про те, яку кількість коду в них вже генеровано за допомогою ШІ. Звісно, це більше клікбейт, ніж факт. Бо генерувати код можна різний та різної якості. Але тенденція точно заслуговує уваги.
Якщо не любите регулярні вирази, то ця стаття не для вас. Але може бути цікаво почитати про те, як регулярні вирази можна поєднати із типами у TypeScript.
Чому безпека це дуже важливо, та яка вразливість була у системі zendesk що дозволило отримати дані багатьох великих компаній можна почитати в історії яку виклав безпосередній учасник.
Для тих, хто не в курсі, Node.js тепер вміє виконувати TypeScript. Sam Thorogood у своєму блозі коротко описав, як це працює.
Команда Deno розповідає, як можна швидко конвертувати CJS у ESM.
Що можна використовувати для валідації схеми VineJS чи Zod? У своєму блозі розповіли LogRocket.
Історія про CHartDB та про те, як за допомогою ШІ за кілька тижнів зробити проєкт, що «полетить».
Щось подивитись
Як використовувати Anthropic API з JavaScript та за допомогою Supabase:
Якщо ви гадаєте, що SQLite мертвий, то ні — живіший за всіх живих. На каналі CoderOne вийшло відео про те, чому в часи усього хмарного SQLite все ще можна використовувати. Та як це робити правильно.
Як тестувати Serverless? Це питання завжди актуальне і не завжди має просту відповідь. Саме про цю тему розповідає в новому відео на каналі Serverless Land — Pawel Zubkiewicz.
Fireship продовжує рекламувати Deno, тепер інструментами для бенчмаркінгу JavaScript.
Роздуми про ШІ та JavaScript від Jason May:
Якщо ви ще не чули про підхід Feature Flags, саме час дізнатись, що то таке, і як це можна побудувати.
Трішки про те, як виглядає сучасний найм Junior-розробників:
Бібліотека місяця
За рекомендацією Stas Slesarev можу радити класну бібліотеку piscina, що допоможе вам ефективно працювати із воркерами в Node.js як з боку розробницького досвіду, так і зі сторони швидкодії.
На цьому все. Пишіть коментарі, діліться дайджестом з друзями та ставте запитання, якщо маєте. Потрошки готуємось до завершення 2024 року. До зустрічі у нових випусках! 😎
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів