pnpmЩо нового в pnpm 12.20
Оновлення експериментального lockfile v13, виправлення для nodeLinker: hoisted, покращення обробки overrides та peer-залежностей.
Реліз від 12 листопада 2026 · оновлено 12 листопада 2026
Головне
- Запис специфікаторів локальних директорій у lockfile формату v13
- Припинення підтримки сервера pnpr версії 0.1.0-alpha.19 та старіших
- Оновлення вбудованого node-gyp без уразливої undici 6 (CVE-2026-84947)
- Коректне збереження вкладених копій залежностей у nodeLinker: hoisted
- Підтримка розділювача npm :: у фрагментах git-залежностей
Коротко
Реліз pnpm 12.20 додає запис специфікаторів для локальних залежностей із директорій в експериментальному форматі lockfile v13. Також версія містить виправлення для режиму nodeLinker: hoisted, обробки peer-залежностей та правил overrides. Крім того, оновлено вбудований node-gyp і змінено вимоги до сумісності із серверами pnpr.
Нові можливості
Експериментальний lockfile v13
- Якщо використовується
lockfile.format: v13, командаpnpm installзаписує специфікатори залежностей для пакетів із локальних директорій. У режимі frozen install змінені специфікатори відхиляються навіть тоді, коли зафіксовані у lockfile версії все ще відповідають новим вимогам.
Виправлення та покращення
Безпека та оновлення
- Віддалене резолвлення (remote resolution), спільні кеші збирання (shared build caches) та завантаження release notes більше не працюють із версією pnpr 0.1.0-alpha.19 або старішими. pnpm тепер зчитує можливості сервера pnpr, вказані під
pnpr.protocols, і зупиняє встановлення з помилкою, якщо сервер не підтверджує запитані політики резолвлення та перевірки. - Вбудований у pnpm пакет
node-gypбільше не містить undici 6 (CVE-2026-84947). Також на Node.js 26 виправлено збій «invalid onError method» під час завантажень черезnode-gypіз використанням проксі або власного CA-файлу.
Резолвлення залежностей
- Правила
overridesіз селектором версій (наприклад,"ms@^2.0.0": "2.1.1") тепер застосовуються до залежностей, оголошених за протоколомcatalog:, якщо діапазон у каталозі відповідає селектору. - Кореневий запис
overrides, який спрямовує пакет на шляхworkspace:(наприклад,workspace:./packages/foo), тепер працює і у випадках, коли від цього пакета залежить пакет із реєстру. - У git-залежностях додано підтримку npm-розділювача
::між параметрами фрагмента (наприклад,github:owner/repo#v1.0.0::path:packages/foo). Раніше весь фрагмент сприймався як назва гілки, через що резолвлення завершувалося збоєм. - Команда
pnpm dedupeтепер зберігає зафіксовану версію середовища виконання зdevEngines.runtimeабоengines.runtimeзалежності, якщо оголошений діапазон її дозволяє. Через цеpnpm dedupe --checkбільше не завершується помилкою після виходу нового релізу Node.js у межах дозволеного діапазону. - У разі використання конфігурації
autoInstallPeersFromHighestMatchконфліктні non-semver peer-залежності залишаються відсутніми, а однакові специфікатори non-semver зберігаються. Бажані версії з реєстру більше не замінюють локальні шляхи або специфікатори з префіксами протоколів під час встановлення відсутніх peer-залежностей.
Режим hoisted node linker
- У режимі
nodeLinker: hoistedпакет зберігає власну вкладену копію залежності, якщо вона була зарезолвлена у версії, відмінній від верхньорівневої (включно з peer-залежностями, наданими батьківським пакетом). Раніше ця копія могла видалятися як дублікат, або верхньорівневе місце отримував peer-варіант із глибшого рівня дерева.
Lockfile та граф peer-залежностей
- Виправлено помилку в
pnpm install, через яку зберігалися застарілі прив'язки peer-залежностей після змін у дереві. Обов'язкові залежності більше не позначаються як опціональні, коли інший проєкт робочого простору видаляє спільний пакет. - Повторні запуски інсталяції тепер зберігають однакові зв'язки залежностей у циклічних графах із кількома варіантами peer-залежностей.
- Виправлено запис
lockfile.format: v13для циклів залежностей із відсутніми, опціональними або транзитивними peer-пакетами. Режим frozen install тепер приймає незмінені injected-пакети, чиї peer-залежності використовують каталоги, а з прапорцем--no-optionalвідхиляє обов'язкові дочірні пакети з каталогів, записані лише як опціональні. - Команда
pnpm deployзберігає зарезолвлені залежності для injected-пакета робочого простору, якщо вони відрізняються від залежностей самого проєкту (зокрема для пакетів ізpublishConfig.directory).
Запуск скриптів та команди середовища виконання
- Скрипти, запущені pnpm у власній групі процесів, тепер коректно завершуються, якщо процес pnpm було примусово зупинено одразу після їхнього старту.
- Якщо назва команди не відповідає жодному скрипту і pnpm виконує її як команду, попереднє встановлення залежностей запускається лише один раз, а його помилки та попередження не дублюються.
- У разі невдалого завантаження глобальними командами рантайму система тепер показує застосовану конфігурацію, а для збоїв Node.js — перелік налаштувань глобальних дзеркал і змінних оточення.
Інші зміни
- Виправлено рідкісні падіння команди
pnpmпід час першого HTTPS-запиту (переважно на віртуальних машинах під керуванням Windows під навантаженням) шляхом ініціалізації випадковості TLS через системний генератор випадкових чисел. - Виправлено помилки конфліктів ревізій у командах
pnpm deprecate,pnpm undeprecateтаpnpm unpublish, коли кеш реєстру повертав застарілі метадані. - Команда
pnpm sbomтепер повідомляє про пошкоджені маніфести в робочому просторі замість ігнорування відповідних пакетів. - Виправлено помилкове відображення затверджених збірок git-залежностей як змінених у
pnpm store statusза наявності застарілих метаданих у сховищі. - Додано розпізнавання Capawesome Cloud та RWX як CI-середовищ.
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо