TGViewer
Инструменты программиста Инструменты программиста @prog_tools · 12.9K subscribers
Post #2866 1.55K
В проекте два источника пакетов: приватный реестр компании и публичный npm. В файле блокировки пакет записан просто как имя и версия, без указания, откуда он приехал. Если оба реестра отдают одно имя и одну версию, побеждает тот, кто ответил первым, и понять это по файлу невозможно.

pnpm — пакетный менеджер для JavaScript с общим хранилищем пакетов на диске и строгим деревом зависимостей. Версия 11.20.0 вышла 3 августа и закрывает как раз эту дыру.

Что внутри:
🔘 пакеты из именованных реестров теперь записываются в файл блокировки с указанием источника, в виде имя@реестр:версия, поэтому каждый реестр получает собственную запись;
🔘 формат файла намеренно не менялся, так что старые версии pnpm его прочитают, но сами такие ключи не пишут: если часть команды сидит на старом pnpm, файл будет переключаться туда-обратно, и в старом виде проект снова уязвим;
🔘 появился встроенный псевдоним npmjs:, который жёстко привязывает зависимость к публичному реестру, даже если общий registry указывает на внутреннее зеркало;
🔘 псевдоним, совпадающий с зарезервированным префиксом вроде file, link, workspace или npm, теперь отклоняется с понятной ошибкой, а не молча перекрывается резолвером;
🔘 пустые значения http-proxy, https-proxy и no-proxy больше не валят установку, а читаются как отсутствующие; proxy=false наконец выключает прокси, а не воспринимается как хост с именем false;
🔘 разрешение зависимостей ускорено: при включённом minimumReleaseAge метаданные фильтруются один раз на пакет, а разобранные версии и диапазоны переиспользуются между сравнениями.

Обновление полуломающее для тех, кто пользуется именованными реестрами: первая же обычная установка перепишет записи в файле блокировки, и этот дифф нужно закоммитить. Заодно его стоит просмотреть: запись, уехавшая к неожиданному реестру, это повод разобраться. Отключить новое поведение нельзя, авторы прямо пишут, что старая форма и есть уязвимость.

Пригодится тем, у кого рядом живут приватный реестр и публичный npm, и кто до сих пор верил, что файл блокировки фиксирует источник пакета.

36 тысяч звёзд на GitHub, ближайшие соседи по нише — Yarn и bun.

Язык: Rust. Лицензия: MIT.

@prog_tools
More from @prog_tools
  1. Sep 20, 2026Как переходить между каталогами с zoxide zoxide запоминает, какие каталоги вы открываете ч…
  2. Sep 20, 2026Как искать по коду с ripgrep с учётом .gitignore ripgrep (rg) рекурсивно ищет строки по ре…
  3. Sep 19, 2026Три вещи, которые невозможно объяснить человеку, родившемуся после 2005-го: зачем нужен бы…
  4. Sep 19, 2026Task: кроссплатформенный запуск задач проекта Task — быстрый инструмент сборки для повторя…
  5. Sep 19, 2026Как запускать и тестировать HTTP-запросы с Hurl Hurl — командная утилита для HTTP-запросов…
  6. Sep 18, 2026Tokei считает строки кода и отделяет их от комментариев Tokei — утилита командной строки д…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →