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

pnpm 12.3.1 виправив self-update і ще прискорив великі monorepo

Гілка 12.3 переводить глобальні команди на native shims, розширює supply-chain політики й оптимізує lockfile-перевірки; patch 12.3.1 закриває регресію оновлення.

pnpm 12.3.1 виправив self-update і ще прискорив великі monorepo

pnpm 12.3.1 виправляє регресію self-update у новій гілці 12.3 та продовжує оптимізацію великих workspace. Після переходу з 12.2 глобальні команди на кшталт node, npm і yarn могли падати з повідомленням про несподіваний аргумент --shim. Patch від 3 вересня відновлює нормальний запуск і виконує міграцію каталогу global bin під час першого звернення.

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

Native shims замість shell-обгорток

У 12.3 context-aware глобальні команди для Node.js, Deno, Bun і власних записів pnpm shim add стали native executables на всіх платформах. На Windows файли .cmd і .ps1 замінює виконуваний файл. Це усуває залежність від особливостей shell та дозволяє передавати змінні середовища з іменами, які shell не вважає коректними identifiers.

Старі shims мігрують під час наступної global install або self-update. Саме на межі цієї міграції й виникла регресія, яку закрив 12.3.1. Пониження до 12.2 чи старішої версії не переписує нові native shims назад, щоб глобальні команди продовжували працювати. Для CI та робочих станцій це аргумент оновлюватися одразу до patch-релізу, а не залишатися на 12.3.0.

Щільніший контроль ланцюга постачання

pnpm remove і pnpm update тепер приймають ті самі одноразові параметри trust policy, що й install та add: --trust-lockfile, --trust-policy, exclude та ignore-after. Remove також перевіряє lockfile за активною політикою. Це закриває розрив, коли правила supply-chain застосовувалися під час встановлення, але не в усіх командах, що змінюють граф залежностей.

Значення minimumReleaseAgeStrict тепер автоматично стає true, якщо команда явно встановила minimumReleaseAge. Раніше чітко заданий cutoff міг поводитися нестрого й пропонувати виключення для надто свіжої версії. Після зміни новий пакет справді блокується до завершення визначеного віку, якщо його не дозволили окремо.

Ще одна security-зміна стосується помилок завантаження. URL із inline credentials або signed query більше не повинні потрапляти в terminal scrollback та CI logs. pnpm приховує user:pass@, query string і fragment. Це не скасовує redaction у CI, але зменшує ризик витоку токена через стандартний текст помилки.

Великі workspace отримали ще кілька оптимізацій

У 12.3 читання pnpm-lock.yaml відбувається паралельно з пошуком проєктів. Перевірка необхідності оновлення lockfile більше не зіставляє кожен project з кожним записом, граф workspace будується один раз, а resolver створює менше lookup keys для залежностей. Запис lockfile також оптимізовано.

Patch 12.3.1 переносить ще дві повторювані операції на рівень проєкту: anchor для повторного рендерингу link: targets обчислюється один раз, а перевірка проєктів проти lockfile виконується паралельно. Розробники не обіцяють універсальний відсоток прискорення, тому результат варто виміряти на власному cold install із очищеним кешем та на звичайному CI run.

DNS, локальні пакети та інтерактивні scripts

На Linux pnpm знову використовує системний resolver getaddrinfo. Вбудований Rust resolver міг не розпізнати опцію в /etc/resolv.conf, проігнорувати налаштовані nameservers і непомітно звернутися до публічного DNS. На Windows системний resolver також прибирає повторні firewall prompts після self-update.

Відновлено додавання локальної директорії, tarball, file: path і tarball URL без штучного префікса імені пакета. Виправлено зависання filtered або recursive run та exec, якщо єдиний script читає terminal input. Окремо dedupe тепер має завершувати міграцію lockfile з pnpm 11 за один прохід.

План безпечного оновлення

  • Закріпіть саме 12.3.1 у packageManager/Corepack або CI image.
  • Після self-update один раз запустіть global commands і перевірте міграцію shims.
  • Порівняйте diff lockfile, особливо у workspace з aliases, cycles та peer dependencies.
  • Перегляньте trust-policy й minimum release age: нова строгість може навмисно зупинити pipeline.
  • Зніміть окремі timings discovery, resolution, linking та lockfile write, а не лише загальний час.
Практичний висновок: 12.3 — змістовний реліз для великих monorepo та команд із supply-chain правилами, але 12.3.0 краще пропустити. Версія 12.3.1 уже містить критичне виправлення переходу на native shims.

Джерело та ліцензія

Матеріал підготовлено за офіційними release notes pnpm 12.3.0 і pnpm 12.3.1. Репозиторій поширюється за MIT License. Український текст перекладено й адаптовано редакцією.

Першоджерело:pnpm Releases ↗
Автор:pnpm contributors

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

</>

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

Далі за темою

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