pnpmЩо нового в pnpm 12.19
Реліз pnpm 12.19 представляє команду pnpm fund, покращення loaded-лінкера, ізоляцію опціональних peer-залежностей і експериментальний формат lockfile v13.
Реліз від 10 листопада 2026 · оновлено 10 листопада 2026
Головне
- Додано команду pnpm fund для перегляду та відкриття посилань на фінансування залежностей
- Лінкер loaded тепер підтримує пакети зі збіркою через кеш побічних ефектів
- Налаштування projectScopedOptionalPeers ізолює пошук опціональних peer-залежностей у межах проєкту
- Експериментальний формат lockfile.format: v13 зі спрощеною структурою у стилі JSON
- Усунено витік облікових даних у повідомленнях про помилки офлайн-встановлення
Коротко
Реліз pnpm 12.19.0 додає команду pnpm fund, дозволяє лінкеру loaded обробляти пакети, що потребують збірки, та представляє налаштування projectScopedOptionalPeers разом із експериментальним форматом lockfile v13. Пакетний менеджер тепер перевіряє поля engines і платформи для кожного проєкту у workspace. Також реліз містить виправлення безпеки, що запобігає витоку облікових даних реєстру під час помилок встановлення в офлайн-режимі.
Нові можливості
Команда pnpm fund
Додано команду pnpm fund, яка виводить список URL-адрес для фінансування, оголошених встановленими залежностями, у тому ж дереві, що й npm fund.
- Прапорець
--jsonформує звіт у форматіnpm fund --json. - Прапорці
--recursiveабо--filterдозволяють формувати звіти для проєктів у workspace. - Команда
pnpm fund <pkg>відкриває URL фінансування встановленого пакета, а прапорець--whichдозволяє обрати одну адресу, якщо їх кілька.
Покращення лінкера loaded
У режимі nodeLinker.type: loaded пакети, які потребують збірки, більше не потрібно додавати до списку nodeLinker.excluded:
- Пакет із відповідним записом у кеші побічних ефектів завантажується зі сховища.
- Якщо читання та запис кешу побічних ефектів увімкнено, pnpm одноразово збирає підтверджений пакет, зберігає результат у кеш побічних ефектів і надалі завантажує його зі сховища. Це стосується і збірок, які не змінюють файли в пакеті, тому їхній скрипт не запускатиметься повторно в інших проєктах із тим самим сховищем.
- Якщо збірка пакета має виконуватися в кожному проєкті (наприклад, установник git-хуків), його слід додати до
sideEffectsCache.exclude. - Інші промахи повз кеш, пакети з нативними доповненнями
.nodeта їхні залежності матеріалізуються автоматично. - pnpm сканує JavaScript-код на наявність імпортів файлової системи,
__dirnameабоimport.meta, автоматично матеріалізуючи відповідні пакети. Оскільки сканування не розпізнає динамічні обчислювані імпорти, такі пакети потрібно вказувати вnodeLinker.excluded.
Керування peer-залежностями
Додано налаштування projectScopedOptionalPeers. Якщо значення встановлено в true, проєкт отримує відсутню опціональну peer-залежність лише тоді, коли версію встановлюють його власні залежності. Залежності іншого проєкту у workspace (наприклад, його devDependencies) більше її не надають. Водночас dedupePeerDependents продовжує дедуплікувати решту залежностей.
Експериментальний lockfile.format: v13
З конфігурацією lockfile.format: v13 pnpm записує pnpm-lock.yaml у синтаксисі, подібному до JSON, із відступами табуляцією та комою після кожного запису, зберігаючи валідність YAML:
- Замість секцій
packagesіsnapshotsфайл містить один записpackagesна версію пакета. - Кожен запис фіксує версії своїх peer-залежностей як власні властивості, тому оновлення peer-залежності змінює лише рядки з її версією.
- pnpm здатний читати файли lockfile в обох форматах незалежно від поточного значення налаштування.
Робота зі сховищем і кросплатформність
- Команда
pnpm store addтепер приймає каталоги з архівами (наприклад,pnpm store add ./tarballs) і рекурсивно додає всі файли.tgz,.tar.gzта.tar. Додавання великої кількості пакетів або локальних архівів стало швидшим. - За наявності
supportedArchitecturesкомандиpnpm installтаpnpm fetchдодатково зберігають у сховищі (без створення лінків) залежності архівів для інших зазначених платформ. Залежності з git-репозиторіїв та опціональні залежності, які зазначена платформа не може виконати або не змогла завантажити, не зберігаються. - Якщо
supportedArchitecturesвизначає рівно одну платформу (відмінну відcurrent), pnpm лінкує варіант пакета для цієї платформи разом із його залежностями. Зміна налаштування або платформи хоста призводить до повторного лінкування під час наступного встановлення навіть із замороженим lockfile. - Додано попередньо зібраний бінарний файл для NetBSD 10 на x64.
Виправлення та покращення
Безпека
- Повідомлення про помилку відсутності архіву в сховищі в офлайн-режимі більше не виводить облікові дані чи токен з URL-адреси тарболу.
Перевірки engines та платформ
- Команди
pnpm install,pnpm add,pnpm updateтаpnpm removeтепер перевіряють поляengines,os,cpuтаlibcдля кожного проєкту у workspace, включаючи корінь.pnpm run -rтаpnpm exec -rвиконують перевірку перед запуском. Несуміснийengines.pnpmзупиняє команду помилкою; несуміснийengines.nodeвиводить попередження (або помилку за умовиengineStrict); непідтримувана платформа генерує попередження. - Опціональна залежність без полів
os,cpuчиlibcбільше не пропускається лише через наявність назви ОС у її імені (наприклад,get-windowsна macOS). Платформа визначається за назвою лише тоді, коли вона також містить токен процесора або libc (наприклад,-win32-x64). - Виправлено пропущені попередження, коли обов'язкова залежність не підтримує поточну версію Node.js.
Стабільність інсталяцій
- Команди
pnpm install,pnpm ciтаpnpm install-testза межами workspace тепер завершуються з помилкоюERR_PNPM_NO_PKG_MANIFEST, якщо каталог не міститьpackage.json,package.json5чиpackage.yaml. - Виправлено зависання
pnpm install, якщо одночасне завантаження архіву або читання маніфесту скасовувалося під час очікування іншими задачами. - Запуск глобальної команди (наприклад,
node) у проєкті з зафіксованою версією більше не зависає під час встановлення цієї версії pnpm. - Плейсхолдер
${VAR}в URL реєстру всерединіpnpm-workspace.yamlабо.npmrcтепер призводить до помилки, оскільки змінні оточення в цих файлах не підставляються. - Завантаження архіву пакета тепер зупиняється після кількості спроб, визначеної
fetchRetries, без повторного повного циклу спроб. - Виправлено залишення відкритих каналів процесів (pipes) після виходу pnpm на macOS.
Заморожений lockfile та лінкер hoisted
pnpm install --frozen-lockfileтепер успішно виконується, якщо зафіксований у lockfile проєкт workspace має порожній каталог (наприклад, неініціалізований git-підмодуль).pnpm install --frozen-lockfileзавершується помилкоюERR_PNPM_OUTDATED_LOCKFILE, якщо зв'язаний через звичайний діапазон semver пакет workspace змінив версію за межі діапазону.- У режимі
nodeLinker: hoistedпакет, який запускає скрипт життєвого циклу або має патч, тепер клонується чи копіюється вnode_modules. Перезапис файлів під час збірки більше не впливає на копію у спільному сховищі. - У режимі
nodeLinker: hoistedpnpm більше не видаляє каталог за межамиnode_modulesпід час видалення пакета, каталог scope якого є символьним посиланням.
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо