pnpm 10.16
次要更改
延迟依赖更新的新设置
最近发生了几起流行软件包被成功攻击的事件。 为了减少安装已损坏版本的风险,我们正在引入一个新的设置,推迟安装新发布的依赖。 在大多数情况下,这种攻击很快就被发现,而且恶意的版本在一个小时内从注册表中删除。
新的设置名为 minimumReleaseAge。 它指定了版本发布后 pnpm 安装之前必须经过的分钟数。 例如,设置 minimumReleaseAge: 1440 可以确保至少在一天前发布的软件包才可以安装。
如果你设置了 minimumReleaseAge,但需要对某些依赖项禁用此限制,则可以在minimumReleaseAgeExclude 设置下列出它们。 例如,通过以下配置,pnpm 将始终安装最新版本的 webpack,无论其发布时间如何:
minimumReleaseAgeExclude:
- webpack
相关问题: #9921。
使用查找器函数进行高级依赖项过滤
增加了对 finders 的支持。
过去,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 中声明查找器函数,并在运行 pnpm list 或 pnpm why 时使用 --find-by=<function name> 标志调用。
假设我们想要找到在对等依赖项中具有 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。