Voydevich
pnpm

Що нового в pnpm 12.17

Реліз pnpm 12.17 додає глобальну перевірку peer-залежностей, нові селектори в overrides та розширені перевірки оновлень для рантаймів і суміжних екосистем.

Реліз від 30 жовтня 2026 · оновлено 8 листопада 2026

Головне

  • Команда pnpm peers check тепер підтримує прапорець --global (-g)
  • Селектори :prod, :optional, :peer та патерни * у секції overrides
  • pnpm outdated та update перевіряють версії рантаймів, Cargo та Python
  • Файли проєкту створюються з правами umask (наприклад, 0644) для Docker

Коротко

Вийшла версія pnpm 12.17.0. Оновлення додає підтримку перевірки глобальних peer-залежностей, розширює можливості конфігурації overrides за допомогою псевдоселекторів груп залежностей і масок *, а також інтегрує перевірку рантаймів, пакетних менеджерів, Cargo та Python у команди pnpm outdated і pnpm update. Крім того, виправлено права доступу до створених файлів під час роботи в Docker-контейнерах та усунено низку помилок під час повторних інсталяцій.

Нові можливості

Перевірка peer-залежностей

  • Команда pnpm peers check тепер приймає прапорці --global (-g) для перевірки глобально встановлених пакетів. Після глобального встановлення чи оновлення повідомлення з попередженням про peer-залежності тепер пропонує виконати pnpm peers check -g.

Розширені селектори в overrides

  • Селектори в overrides отримали підтримку псевдоселекторів :prod, :optional та :peer, які націлюються на конкретну групу залежностей.
  • Підтримуються патерни з маскою * для імен батьківських і цільових пакетів.
  • Правило перевизначення зі значенням, що не є діапазоном (наприклад, npm: або file:), більше не додає peer-залежність до dependencies.
  • Видалення опціональної залежності за допомогою "-" тепер також видаляє дублікат запису з dependencies.

Оновлення рантаймів та залежностей Cargo і Python

  • Команди pnpm outdated та pnpm update тепер аналізують та оновлюють версії пакетних менеджерів і рантаймів у полях devEngines.packageManager, packageManager, devEngines.runtime, engines.runtime та залежностях типу runtime:.
  • За умов увімкнених налаштувань cargo.enabled або python.enabled команди pnpm outdated та pnpm update перевіряють й оновлюють залежності Cargo у файлах Cargo.toml і Cargo.lock, а також залежності Python у pyproject.toml і pylock.toml.

Виправлення та покращення

Встановлення пакетів і файлова система

  • Файли, які pnpm створює в проєкті, тепер отримують стандартні дозволи згідно з umask (наприклад, 0644). Раніше низка файлів була доступна для читання лише користувачу, який запускав pnpm, що викликало помилки в Docker-образах під іншими користувачами. Це виправлення стосується node_modules/.pnpm-workspace-state-v1.json, pnpm-workspace.yaml, файлів після pnpm deploy, патчів із pnpm patch-commit, відновленого локфайлу після pnpm dedupe --check, а також згенерованих файлів Cargo та Python.
  • pnpm install більше не створює пошкоджені посилання на залежності, якщо node_modules проєкту є символьним посиланням на іншу директорію.
  • Команди, встановлені через pnpm add --global, тепер знаходять залежності, які pnpm підіймає (hoist) для їхнього пакета (актуально для незадекларованих залежностей на кшталт нативних адонів під конкретну платформу).
  • У разі перемикання на версію, закріплену проєктом, pnpm тепер встановлює нативний бінарний файл цієї версії для поточного хоста, навіть якщо supportedArchitectures його виключає.
  • У глобальному віртуальному сховищі (global virtual store) зміна залежності пакета в циклі залежностей тепер виділяє кожному пакету в цьому циклі нову директорію.
  • Із параметром nodeLinker: hoisted, коли два проєкти у воркспейсі потребують однакову версію пакета і її неможливо підняти в корінь, кожен проєкт зберігає копію у власному node_modules.
  • Селектор latest для Node.js тепер обирає найновіший стабільний реліз.
  • Створення жорстких посилань зі сховища тепер викликає перевірку стану (stat) кожного файлу зі сховища лише один раз за інсталяцію.

Повторні інсталяції та локальні залежності

  • pnpm install --frozen-lockfile більше не повідомляє про застарілий локфайл одразу після інсталяції, яка його створила, якщо хук readPackage або packageExtensions змінювали залежності локальної директорії за межами воркспейсу.
  • pnpm install повторно розв'язує залежності після редагування інжектованої залежності workspace:../dir за межами патернів воркспейсу зі спільним локфайлом.
  • pnpm install знову створює відсутні посилання для залежностей workspace: або link:, якщо вони були видалені з node_modules.
  • Повторний запуск pnpm install знову повертає статус «Already up to date», коли хук readPackage змінює залежності проєкту воркспейсу.

Керування залежностями

  • pnpm update --latest із селекторами пакетів тепер оновлює залежності вибраних пакетів у межах їхніх задекларованих діапазонів, зберігаючи зафіксовані версії для виключених пакетів.
  • pnpm add <pkg>@<tag> тепер використовує запис каталогу з цим самим dist-tag і зберігає залежність як catalog:.
  • pnpm add тепер зберігає розв'язаний діапазон версій для npm-аліасів (наприклад, pnpm add v2@npm:vue зберігає npm:vue@^3.5.13).

Виконання скриптів і команд

  • Програми, запущені через скрипт або pnpm exec (наприклад, браузер через пакет open), тепер продовжують працювати після завершення pnpm за тих самих умов, що й без pnpm. У разі аварійного переривання рекурсивного чи паралельного запуску скрипти на Unix отримують SIGTERM і примусово завершуються лише за 2 секунди.
  • На Windows shell shim для .cmd чи .bat бінарників тепер запускає їх під Git Bash, коли вимкнено конвертацію аргументів MSYS (наприклад, із MSYS_NO_PATHCONV=1).
  • pnx та pnpm create тепер виконують команди в директорії, заданій прапорцями --dir або --workspace-root.
  • Прапорець pnpm --env-file тепер зчитує змінні аналогічно до node --env-file: значення беруться буквально, без розкриття $VAR, а шляхи Windows на кшталт C:\Users\me завантажуються без змін.

Налаштування

  • pnpm version більше не створює git-коміт і тег, якщо параметр gitTagVersion має значення false.
  • pnpm publish тепер зчитує налаштування publishBranch із pnpm-workspace.yaml та змінної PNPM_CONFIG_PUBLISH_BRANCH.
  • Додано підтримку прапорців командного рядка --strict-ssl та --local-address <ip>.
  • pnpm doctor тепер використовує 15-секундний таймаут під час перевірки з'єднання з реєстром.
  • Помилки парсингу pnpm-workspace.yaml тепер повертають код ERR_PNPM_INVALID_SETTING.
  • Повідомлення про помилку невалідної назви залежності в маніфесті тепер вказує точну директорію проєкту.

Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо