Зараз читаютьПрактичні новини про код, AI та технології — без інформаційного шуму
Розробка4 хв читання

pnpm 12.2 прискорив великі monorepo та виправив audit і deploy

Менеджер пакетів один раз розв’язує повторювані workspace-залежності, паралельно шукає проєкти та коректніше ремонтує audit, deploy і shared store.

pnpm 12.2 прискорив великі monorepo та виправив audit і deploy

pnpm 12.2 оптимізує найболючіші місця великих JavaScript monorepo: повторювані workspace: залежності тепер розв’язуються один раз, пошук пакетів і читання package.json виконуються паралельно, а звіт peer dependencies не обходить без потреби весь lock-файл. Паралельно реліз виправляє audit --fix, deploy без обов’язкової ін’єкції workspace-пакетів і гонки у спільному global virtual store.

Редакційна ілюстрація прискореного графа залежностей і паралельних задач великого monorepo
Редакційна AI-ілюстрація до огляду pnpm 12.2; вона не входить до першоджерела та не відтворює логотип pnpm.

Менше повторної роботи у workspace

Якщо десятки пакетів посилаються на одну внутрішню залежність через workspace:*, workspace:^ або конкретну workspace-версію, попередня логіка могла повторно виконувати те саме resolution для кожного проєкту. У 12.2 результат кешується й повторно використовується. Це особливо корисно у frontend-платформах із великою кількістю design-system, tooling і application packages.

Workspace discovery також оптимізовано: patterns перевіряються конкурентно, а знайдені manifests читаються паралельно. Literal directories і звичні patterns із кінцевою зірочкою обробляються швидше. Водночас повернено правило pnpm 11 для прихованих каталогів: wildcard не захоплює .git або packages/.cache, якщо dot-directory не названий явно. Це зменшує випадкове включення службових директорій.

Audit repair працює передбачуваніше

pnpm audit --fix більше не має падати з ERR_PNPM_INVALID_FIX_OPTION, якщо прапорець передано без значення, зокрема перед --json. Режим --fix=override тепер враховує saveExact і savePrefix під час запису vulnerability overrides. Це важливо для репозиторіїв, де формат діапазону версій є частиною політики відтворюваності.

Автоматичний fix не слід сприймати як завершене security review. Після зміни overrides потрібно зберегти diff lock-файлу, повторити тести й перевірити, чи не змінився runtime API транзитивної залежності. Для критичних пакетів advisory варто зіставити з реально reachable кодом.

Deploy без загальної вимоги injectWorkspacePackages

pnpm deploy тепер може працювати без увімкненого injectWorkspacePackages. Linked workspace dependency переписується у dedicated deploy lockfile як file: dependency, а peer dependencies прив’язуються до графа розгортання. Це робить production bundle менш залежним від глобального workspace setting.

Є чесне обмеження: якщо peer у deploy graph розв’язується одразу у кілька версій, pnpm не вгадує потрібну. Він повертає ERR_PNPM_DEPLOY_AMBIGUOUS_PEER, називає пакет, peer і конкурентні версії та радить закріпити одну через override. Така помилка корисніша за мовчазний вибір, який може відрізнятися між CI та локальним середовищем.

Гонки у shared store і Windows/WSL

Коли кілька інсталяцій одночасно працювали зі спільним global virtual store, одна могла видалити command shim саме тоді, коли інша змінювала його права, що завершувалося ERR_PNPM_CMD_SHIM_CHMOD. Реліз закриває цю гонку та повторює transient file-lock operations у Windows під час заміни hoisted packages.

Виправлено PowerShell shim після глобальної інсталяції pnpm через npm, а context-aware shims у WSL2 тепер спрямовують native Linux installation до runtime проєкту. Patch 12.2.1, випущений невдовзі після 12.2, додатково відновив POSIX executable target без розширення, щоб pnpm 12.1 і старші могли самостійно оновитися до нової гілки. Тому практична ціль для оновлення — щонайменше 12.2.1.

Інші корисні зміни

  • Catalogs можуть розв’язувати workspace-залежності через протокол workspace:.
  • Catalog hooks із pnpmfile завантажуються до pack, publish і stage publish.
  • Optional peer обирається у версії, яка відповідає оголошеному діапазону, а не випадковій root-версії.
  • Scripts, вибрані regex pattern в одному проєкті, запускаються паралельно в межах workspaceConcurrency.
  • Не-ASCII символи у конфігурації, наприклад шлях café-store, більше не псуються під час environment substitution.
Практичний висновок: для оновлення обирайте 12.2.1, зніміть benchmark cold install і deploy, а зміни audit overrides та peer resolution перевірте через diff і тести.

Обмеження

Release notes не обіцяють конкретного прискорення: результат залежить від кількості workspace-проєктів, повторюваності dependencies, storage та cache. Новий deploy flow не усуває неоднозначні peers і навмисно зупиняється, коли правильну версію неможливо визначити. Оновлення також не замінює pinning package-manager version у Corepack або CI image.

Джерело та права

Матеріал є самостійним українським перекладом-переказом release notes pnpm 12.2 і patch 12.2.1, опублікованих 1 вересня 2026 року командою pnpm. Репозиторій поширюється за MIT License. Перекладено, адаптовано й доповнено редакцією «Бібліотеки програміста». Обкладинка створена редакцією за допомогою AI і не входить до першоджерела.

Першоджерело:pnpm ↗
Автор:pnpm Contributors
Ліцензія:MIT License ↗

Матеріал перекладено, переказано та доповнено редакцією українською мовою.

</>

Читайте далі — ми вже розбираємо наступну важливу тему.

Далі за темою

Схожі матеріали