Voydevich
pnpm

Що нового в pnpm 12.16

Реліз pnpm 12.16 додає глобальний прапорець --env-file, підтримку оновлення symlink-файлів pnpm-lock.yaml та режим pnpm setup --no-modify-path.

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

Головне

  • Глобальний прапорець --env-file для завантаження змінних оточення з dotenv-файлів
  • Підтримка оновлення pnpm-lock.yaml, якщо він є символьним посиланням
  • Опція --no-modify-path для команди pnpm setup
  • Усунення двох вразливостей безпеки: у розпакуванні zstd та підписанні
  • Суворіші перевірки налаштувань для node_modules при повторних інсталяціях

Коротко

У релізі pnpm 12.16 з'явився повторюваний глобальний прапорець --env-file для завантаження змінних оточення з dotenv-файлів, опція --no-modify-path для команди pnpm setup та можливість оновлювати pnpm-lock.yaml, оформлений як символьне посилання. Також виправлено дві вразливості безпеки — під час декомпресії zstd та в операціях цифрового підпису. Оновлення супроводжується численними покращеннями роботи з конфігураціями та виправленнями помилок під час інсталяції пакетів.

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

Прапорець --env-file

Додано глобальний прапорець --env-file <path>, який можна вказувати кілька разів для завантаження змінних оточення з файлів у форматі dotenv перед виконанням команди. Файли, зазначені пізніше, перезаписують значення з попередніх, але змінні, що вже існували в середовищі, зберігаються. Завантажені змінні доступні для інтерполяції в .npmrc на рівні користувача та для життєвих циклів скриптів (lifecycle scripts).

Робота з pnpm-lock.yaml через символьні посилання

Тепер pnpm уміє оновлювати pnpm-lock.yaml, який є символьним посиланням (symlink). Для цього призначене налаштування symlinkedLockfileTargetDirs (або змінна оточення PNPM_CONFIG_SYMLINKED_LOCKFILE_TARGET_DIRS), яке задається в глобальній конфігурації. У ньому перелічуються директорії, на які може вказувати lockfile: якщо файл, на який посилається symlink, міститься в одній із цих директорій, pnpm записує оновлення саме в нього, залишаючи символьне посилання на місці. Це налаштування ігнорується у pnpm-workspace.yaml.

Опція --no-modify-path для pnpm setup

Для команди pnpm setup додано прапорець --no-modify-path. Він встановлює pnpm, не додаючи його до системної змінної PATH, залишаючи файли конфігурації оболонки, реєстр Windows та файли середовища GitHub Actions без змін. Натомість команда виводить інструкції з рядками, які користувач може додати самостійно.

Безпека

  • Усунено вразливості, пов'язані з витоком пам'яті та обробкою алокацій під час обробки стиснутих zstd-даних.
  • Процедури підписання в pnpm і pnpr більше не використовують арифметичні операції, які можуть призвести до витоку закритого ключа через аналіз часу виконання (timing attacks). Це стосується спільних артефактів, токенів реєстру OCI та стану входу OIDC.

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

  • Реакція на зміну налаштувань: повторний запуск pnpm install більше не виводить хибне «Already up to date», якщо змінилися параметри storeDir, virtualStoreDir, globalVirtualStoreDir, virtualStoreDirMaxLength, увімкнено dangerouslyAllowAllBuilds або вимкнено trustLockfile.
  • Суворіша поведінка команд: pnpm add, pnpm remove та pnpm update тепер завершуються помилкою (наприклад, ERR_PNPM_UNEXPECTED_STORE, ERR_PNPM_NODE_LINKER_DIFF), якщо поточний node_modules не відповідає конфігурації, замість автоматичного тихого видалення та перевстановлення каталогу.
  • Прапорці для pnpm add: підтримуються короткі літери в нижньому регістрі -p, -d, -o та -e як псевдоніми відповідно до --save-prod, --save-dev, --save-optional та --save-exact. Конструкція виду pnpm -D install <pkg> тепер коректно зберігає залежність у devDependencies.
  • Глобальні пакети: під час встановлення через pnpm add -g пакунки тепер зв'язуються зі спільного глобального віртуального сховища. Налаштування virtualStoreType: project повертає кожному глобальному пакету власне віртуальне сховище.
  • Вирішення однакових версій із реєстрів: якщо звичайний діапазон версій та префіксний специфікатор <prefix>: резолвлять пакет з одного реєстру, тепер створюється один запис у pnpm-lock.yaml, і файл завантажується один раз, усуваючи збої одинаків (singletons) та перевірок instanceof.
  • Поведінка autoDedupe: false: якщо вимкнено autoDedupe, залежності кожного проєкту робочого простору резолвляться відповідно до його власних діапазонів і більше не стримуються вужчими версіями із сусідніх проєктів.
  • Очищення та синхронізація .bin: команда pnpm install автоматично видаляє шими (shims) з node_modules/.bin, якщо залежність у робочому просторі перейменовує або прибирає поле з bin.
  • Підтримка прапорця --cache-dir: додано прапорець --cache-dir <dir> для прямого налаштування шляху кешу (наприклад, pnpm install --cache-dir /tmp/pnpm-cache).
  • Складання з files у pnpm pack: pnpm pack та pnpm publish застосовують прямі назви файлів у полі files після обробки glob-шаблонів, дотримуючись поведінки npm.

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