Node.js Digest #13: прощавай Corepack, Make JS Great Again, Node.js трішки поламав інтернет, Porffor
Привіт, спільното! На звʼязку Олександр Зіневич, Engineering Director з Avenga. Цього разу я хворів на ковід, а тому новий дайджест вийшов трохи пізніше ніж зазвичай ;)
Коротко про головне
🔹 Deno v1.45.5 — якщо ви користувач Deno, зверніть увагу: вийшла нова партія фіксів та покращень.
🔹 ESLint v9.9.0 — в ESLint завезли експериментальну підтримку конфігураційних файлів TypeScript.
🔹 Node.js v22.6.0, v20.16.0 — традиційні оновлення Node.js, які цього разу вже наче нічого не ламають 🙂
🔹 Оновилися кращі практики для Node.js розробки від Yoni Goldberg.
🔹 Bun v1.1.23 — незважаючи на те, що хайп навколо Bun потрошки затихає, команда активно працює над новими версіями та активно наймає нових людей у свою команду. У новому релізі традиційно багато фіксів для покращення сумісності з Node.js.
🔹 TypeScript 5.6 Beta — для тих, хто має можливість, бета-версія нового TypeScript вже доступна до використання. Цього разу оновлення не таке масштабне як минулого разу, але трішки цікавих речей є.
🔹 Protobuf-ES 2.0 — побачив світ і готовий до використання у TypeScript.
Ще одні результати опитування від StackOverflow
Вже трошки давніше (але мусимо за них згадати) вийшли щорічні результати опитування від StackOverflow. В опитуванні взяло участь не так багато людей, як, напевно, хотілось би. Лише 65 437 розробників зі 180 країн світу. Дуже малий відсоток від загальної кількості користувачів StackOverflow — це варто врахувати, коли будемо розглядати результати.
Як завжди JavaScript лідер серед мов програмування як серед наявних професіоналів, так і серед тих, хто лише заходить в нашу рідну айтішечку.
А Node.js все ще конкурує з React за популярність серед технологій для веброзробки.
З цікавого і не дуже очікуваного для мене — популярність Full-stack позицій серед розробників, яка вища за Back-end і Front-end разом узяті. Звісно, потрібно враховувати невелику аудиторію. Результат в опитуванні більшого масштабу можливо був би іншим, проте велике бажання клієнтів наймати Full-stack розробників — це точно те, що можна спостерігати на ринку сьогодні.
Ну і звісно є величезний ріст використання різноманітних інструментів з ШІ, куди ж зараз без нього. З повних списком результатів можете ознайомитись тут.
Драма з Corepack
Хто б міг подумати, що піднявши питання про увімкнення Corepack як стандартного налаштування у листопаді 2023 року, ми прийдемо до того, що тепер Corepack взагалі будуть випилювати з основної збірки Node.js.
Для тих, хто не в курсі, Corepack — це експериментальна фіча Node.js яка дозволяла використовувати різні менеджери пакетів без необхідності встановлювати їх. Через її відносну популярність постало питання про те, що може б увімкнути її як усталену і зробити опціональним навіть вибір npm, тим самим забравши його з основної збірки.
Проте обговорення спочатку звелись до того, що npm ніхто нікуди забирати не буде. Далі дійшли до дорожньої карти того, як будуть забирати Corepack з основної збірки Node.js. Відповідний PR, який розпочинає цей процес, в момент написання цього тексту ще відкритий. Схоже, що сильний негатив від спільноти трішки сповільнив цей процес. Будемо спостерігати за новинами. А тим, хто використовує Corepack, потрібно потихеньку готуватись до змін у стандарті 🙂
Оновлення Node.js трішки поламало інтернет
Навіть у таких досвідчених спільнотах як Node.js з відпрацьованими процесами та купою запобіжників бувають проблеми, які за збігом обставин всі чомусь пропустили й побачили вже аж у продакшні 🙂
Новий реліз Node.js поламав фактично всі додатки, що використовували v22.5.0. У відповідному PR з фіксами автор розповів, чому так сталось.
Проблем було дві: по-перше, у lib/internal/fs/read/context.js некоректно використовувався деструктор, через що відповідно екземпляр був недоступний і вилітала помилка.
По-друге, використання V8 Fast Api у fs.closeSync() спричинило помилку навіть в NPM.
У наступних версіях це все вже пофіксили. Сподіваємось, більше такого не повториться (звісно, що повториться...).
TypeScript + Node.js = ❤️
Як я вже згадував у попередніх дайджестах, поява усіх цих нових модних середовищ виконання JavaScript — це в першу чергу добре для спільноти Node.js. Саме так є можливість подивитись на те, що придумали конкуренти, як на це відреагували розробники, й впровадити це у Node.js, якщо для цього є відповідна технічна можливість.
Саме тому, що TypeScript з коробки підтримують і Deno і Bun, у липні сталось те, що раніше здавалось би фантастикою. У Node.js додали підтримку TypeScript. Звісно, все це ще не працює як усталене налаштування і щоб виконати файл із розширенням .ts потрібно використовувати відповідний прапорець — - -experimental-strip-types.
Загалом це все тільки-тільки початок і очікувати, що нам відразу завезуть повноцінну підтримку, було занадто оптимістично. Тут ви можете ознайомитись із дорожньою картою того, куди буде рухатися і як розвиватиметься цей функціонал. Знаю, що мало хто з читачів працює із найновішою версією Node.js, де доступна ця фіча. Тому ловіть посилання на Codesandbox, де вже зараз можете спробувати, як це працює.
EcmaScript 2024
Ще у червні (а я чомусь це пропустив), було затверджено новий стандарт EcmaScript 2024. Все лишилось майже так само, як у ES 2023, лише додали трошки нових фіч, які встигли погодити за останній рік 🙂
Власне, чогось нового не дуже багато:
⚑ Promise.withResolvers() який в ноді все ще працює лише з-під прапорця —js-promise-withresolvers;
⚑ Array grouping, який в Node.js вже давно доступний;
⚑ Atomics.waitAsync, який у V8 підтримується вже роки 3;
⚑ Та ще кілька інших фіч, про які можете почитати тут;
Сподіваємось, що у 2025 році EcmaScript стандартизує більше усіляких цікавих речей.
Porffor, нарешті щось цікаве
Не так давно я згадував LLRT — середовище виконання від AWS, заточене під швидку та ефективну роботу AWS Lambda. Нещодавно у LLRT з’явився конкурент, а саме експериментальний проєкт Porforr. Ну як експериментальний, не встиг автор розповісти трішки деталей про своє дітище, як проєкт профінансувався кофаундером Github. Тому тепер це фултайм робота для Oliver Medhurst.
Проєкт насправді більш ніж цікавий. Крім того, що Porforr компілить все в WebAssembly, так тут ще й Ahead Of Time компіляція використовується. В результуючий білд не вкладають купу додаткових інструментів, щоб це все запустилось, а лише нативний код. Звісно, такий інструмент не витіснить короля веброзробки Node.js, але defunkt просто так би не фінансував цю розробку ;) Більше обговорення тут.
Make JavaScript Great Again
Певно, начитавшись відповідей розробників на State of JavaScript 2024, про який я згадував у попередньому дайджесті, спільнота вирішила що треба — Make JS Great Again.
Як результат створили ініціативу e18e, яка покликана виправити наявні проблеми в JavaScript екосистемі та витягнути розробників із депресивної ями. Серед основних завдань спільноти розробників e18e є виправлення залежностей, покращення швидкодії,
Наразі спільнота виглядає доволі активною, тому якщо у вас є вільний час, можете долучатись до того, щоб зробити наш улюблений JavaScript знову місцем радості та сили.
Щось почитати
Я особисто обожнюю читати кейси великих компаній. Тут можете почитати про те, як Stripe свою базу даних масштабували. Деталей не надто багато, але все одно цікаво.
Якщо ви любите гру Elden Ring так само як і я, то зрозумієте біль людини, що запланувала собі ігровий вечір, але довелось розбиратись із проблемами на продакшні одного із сервісів. Саме так починається історія від компанії Zalando та їх цікавої проблеми із worker-ами.
Що вибрати: Node.js, Deno чи Bun? Крім підтримки спільноти та обсягів екосистеми, трішки бенчмарків ніколи не завадить. Цікавими є результати, у яких виграють не маркетингові стратегії та гучні заяви, а реальні показники.
Штучний інтелект продовжує хайпити і все глибше поринати у світ розробки. Команда Docker розмірковує на тему генерації Docker файлів із використанням генеративного штучного інтелекту.
Як купа спам-пакетів гарну ініціативу зіпсували, або трішки про безпеку в npm. Цього разу під ударом Tea, який заспамили величезною кількістю фейкових npm-пакетів.
Команда Node.js поділилась автоматизацією процесу релізу безпекових фіксів так, щоб збільшити їх кількість за місяць. Додатково почали огляд експериментальних фіч Node.js, які вже давним-давно неактивні або потребують кращої підтримки.
Трішки нагадати відповідь на типове питання на співбесідах, що викликає протікання пам’яті у JavaScript, допоможе стаття від Trevor Indrek Lasn.
Node.js нативний Test Runner виглядає як щось, що підходить лише для супер простих задач. Проте це не так. Тут можете подивитись на складніші приклади використання.
Розробники Bun обіцяють нам завести підтримку кластерів, як завжди з якоюсь неймовірною швидкодією.
Ryan Dahl розповідає, яких помилок допустились при початковому дизайні HTTP імпортів.
Щось подивитись
Antony Shew ділиться своїми думками про те, як правильно структурувати Monorepo:
А ви ще не чули про Static Hermes? Якщо ні, точно варто переглянути доповідь від Neil Dhar про цю штуку. Просто щоб розуміти яка шаленість відбувається із середовищами виконання JS:
Також доступними є відео з конференції NodeTLV. Там далеко не всі доповіді англійською. З тих, що англійською, мою увагу привернула доповідь від Erick Wendel. А також доповідь про Proxy від Evytar Alush та про Neo4j від Ariel Shulman.
Крім цього, доступні відео від Gitnation TechLeadConf:
Та JSNation:
Бібліотека місяця
Цього місяця ділюсь з Вами бібліотекою, в яку закохався через її синтаксис і можливість робити запити не просто в логічний спосіб, а ще й у максимально короткий. Знайомтесь: бібліотека Ky. Під капотом тут все той же самий fetch, але зверху є набагато приємніший синтаксис та різні плюшки (тайм-аути, повторні виклики, префікси тощо).
На цьому все. Пишіть коментарі, діліться дайджестом з друзями та ставте запитання, якщо маєте. До зустрічі у нових випусках! 😎
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів