pnpm 10.16
Незначні зміни#
Новий параметр для відкладеного оновлення залежностей#
Останнім часом було кілька інцидентів, коли популярні пакунки були успішно атаковані. Щоб зменшити ризик встановлення скомпрометованої версії, ми вводимо новий параметр, який затримує встановлення щойно випущених залежностей. У більшості випадків такі атаки виявляються швидко, а шкідливі версії видаляються з реєстру протягом години.
Новий параметр називається minimumReleaseAge. Він визначає кількість хвилин, які мають пройти після публікації версії, перш ніж pnpm її встановить. Наприклад, встановлення значення minimumReleaseAge: 1440 гарантує, що можна буде встановити лише пакунки, випущені принаймні один день тому.
Якщо ви встановили minimumReleaseAge, але вам потрібно вимкнути це обмеження для певних залежностей, ви можете перерахувати їх у налаштуванні minimumReleaseAgeExclude. Наприклад, з такою конфігурацією pnpm завжди встановлюватиме останню версію webpack, незалежно від часу її випуску:
minimumReleaseAgeExclude:
- webpack
Див. тікет: #9921.
Розширена фільтрація залежностей за допомогою функцій пошуку#
Додано підтримку пошуку.
У минулому pnpm list та pnpm why могли шукати залежності лише за назвою (і, опціонально, за версією). Наприклад:
pnpm why minimist
виводить ланцюжок залежностей для будь-якого встановленого екземпляра minimist:
verdaccio 5.20.1
├─┬ handlebars 4.7.7
│ └── minimist 1.2.8
└─┬ mv 2.1.1
└─┬ mkdirp 0.5.6
└── minimist 1.2.8
Що робити, якщо ми хочемо шукати за іншими властивостями залежності, а не лише за її назвою? Наприклад, знайти всі пакунки, які мають 'react@17' у своїх прямих залежностях?
Тепер це можливо завдяки "функціям пошуку". Функції пошуку можна оголосити у файлі .pnpmfile.cjs та викликати з прапорцем --find-by=<function name> під час виконання команд pnpm list або pnpm why.
Припустимо, нам потрібно знайти будь-які залежності, які містять React 17 у прямих залежностях. Ми можемо додати цей пошук до нашого .pnpmfile.cjs:
module.exports = {
finders: {
react17: (ctx) => {
return ctx.readManifest().peerDependencies?.react === "^17.0.0";
},
},
};
Тепер ми можемо використовувати цю функцію пошуку, виконавши:
pnpm why --find-by=react17
pnpm знайде всі залежності, які мають цей React в прямих залежностях, і виведе їх точне розташування в графі залежностей.
@apollo/client 4.0.4
├── @graphql-typed-document-node/core 3.2.0
└── graphql-tag 2.12.6
Також можна вивести деяку додаткову інформацію у вивід, повернувши рядок з пошуку. Наприклад, за допомогою наступного пошуку:
module.exports = {
finders: {
react17: (ctx) => {
const manifest = ctx.readManifest();
if (manifest.peerDependencies?.react === "^17.0.0") {
return `license: ${manifest.license}`;
}
return false;
},
},
};
Кожен пакунок, що відповідає цьому параметру, також виведе ліцензію зі свого package.json:
@apollo/client 4.0.4
├── @graphql-typed-document-node/core 3.2.0
│ license: MIT
└── graphql-tag 2.12.6
license: MIT
Див. PR: #9946.
Зміни в патчах#
- Виправлено попередження про застаріле програмне забезпечення, яке виводиться під час виконання pnpm за допомогою Node.js 24 #9529.
- Викинути помилку, якщо
nodeVersionне встановлено на точну версію semver #9934. - Команда
pnpm publishповинна мати можливість публікувати файл.tar.gz#9927. - Скасування запущеного процесу за допомогою Ctrl-C має призвести до того, що
pnpm runповерне ненульовий код завершення #9626.