> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# wtf is corepack?
- URL: https://www.rozhkov.me/js-ecosystem/
- Published: 2024-12-20T07:24:44.000Z
- Updated: 2024-12-20T07:24:44.000Z
- Author: Vova Rozhkov
- Tags: спостереження

Я регулярно [оновлюю всі залежності всіх проєктів на найновіші](https://www.rozhkov.me/rotting-software-update/). Оскільки в мене в основному Rails та Java то це тривіальні процедури: оновити версію рубі на найновішу що вийшла, а потім зробити `bundle update`. Жодна з версій залежностей в мене не залочена, тому я постійно живу на всьому останньому. В Java трішки складніше, там версії лочаться, тому треба піти й перевірити що зараз останнє, бо автокомпліт IntelliJ щось перестав працювати.

Звісно час від часу щось трохи відвалюється, але загалом все працює чудово, і я ніколи не маю проблем з тим що версії чого застаріли на два роки й оновитися дуже складно або просто неможливо.

Ось я вирішив оновити докерфайл проєкту, бо колись давно виникла проблема з `alpine` та однією з версій рубі, щось там крашилось, довелося змінити базовий імедж на `debian-slim`. Разом зі зміною я втратив [jemalloc](https://www.rozhkov.me/zero-cost-memory-consumption-improvement-with-jemalloc/), але тоді це було не таким критичним.

Отже, я вирішив повернути все назад. Для rails є гем (бібліотека), який генерує докерфайл, вже оптимізований, з шарами та усякими оптимізаціями щодо розміру імеджу на виході. Запустив-перегенерив.

Звернув увагу що у мене не змінилась версія `yarn`. Хто пам'ятає — це така альтернатива `npm` яку написали у фейсбуці коли `npm` був ще неоптимальним. З якоїсь причини це є дефолтний пакетний менеджер js-залежностей в Rails. І от я дивлюся що він у мене версії типу 1.22.11 чи щось таке. Дивно, думаю, йду на [офіційний сайт](https://yarnpkg.com/), а там пише що вже є 4.x.x. Дивлюся як його оновити, а там `corepack enable`⁣, а потім `yarn set version stable` та `yarn install`. WTF? Читаю далі, а виявляється що *«we don't tell you to run* `*npm install -g yarn*` *to install Yarn - we even recommend against it».*

Короче в джаваскрипті придумали якусь штуку що зветься `corepack` і тепер треба робити через неї. Також, вже досить давно додали `npx`, але я не розумію чим це відрізняється від `npm`.

Все як завжди. Поки в джаві нічого не змінюється вже 10, а то й більше років і ти як запускав `./gradlew build`, так і запускаєш, поки в рубі ти як робив `bundle install`, так і робиш, джаваскріптери знову видумують щось нове.

*Ну гаразд, ще можна відзначити python, де vc-backed контора написала заміну pip, pyenv, virtualenv, poetry, setuptools та ще бозна-чому на расті —* [*uv*](https://github.com/astral-sh/uv)*. Зараз вона на хайпі, всі пісяють кіпятком крім ортодоскальних пітоністів які незадоволені тим що пакетний менеджер пітона написаний не на пітоні.*

І це я ще не торкався теми фронтенду! Бо я так розумію що вебпак уже давно потьмянів, і новий shiny object фронтендерів це [Vite](https://vite.dev/). То я ще не згадую про rollup (?), parcel(??) та esbuild (???) які можна використовувати для збірок фронтенду.

Зовсім забув про [Bun](https://bun.sh/) та [Deno](https://deno.com/)! Що це, кому, навіщо?

Одним словом, джаваскріптова екосистема як була клоун фієстою 10 год тому, так такою й залишилась і навіть стала гірше.

В чому причина? Популярність платформи? Ну так подивіться на джаву або на PHP — там такої шляпи немає. Новизна? Камон, 10 год уже SPA-непотріб впевнено крокує по куцим просторам 8 гігабайт вашого макбуку а ви так і не можете визначитися чим ставити пакети.

🤦‍♂️