






























大家好,我是豆爸(吴玺喆)。我看pnpm 10.14支持直接JavaScript运行时的安装了,这样可以用它声明的版本进行运行时的下载安装。
先看看之前用corepack的“间接”方式:
在Node.js 25之前在里面集成了一个实验性的小工具:corepack,用来管理包管理器的,比如yarn、pnpm。想要支持JavaScript运行时的安装,可以先启用corepack:
corepack enable
然后指定项目所在pnpm的版本:
corepack prepare pnpm@9.15.4 --activate
接下来,安装Node.js版本:
pnpm env use --global 18
现在,pnpm 10.14 支持JavaScript运行时的安装了。
那我们在Monorepo项目中,要怎样配置呢?
具体配置步骤如下:
// package.json
{
"devEngines": {
"runtime": {
"name": "node",
"version": "^22.17.0",
"onFail": "download" // we only support the "download" value for now
}
}
}
// packages/app/package.json
{
"devEngines": {
"runtime": {
"name": "node",
"version": "^18.20.8",
"onFail": "download"
}
}
}
{
"volta": {
"node": "18.20.8",
"pnpm: "9.15.4"
}
}
当执行pnpm install时,如果你本地的开发环境的Node.js版本比如是16.x,而与项目所需要的版本是22.17。那么,就会通过你指定的版本范围去匹配:

锁文件(lockfile)会保存运行时的版本,以及校验和(checksum)。这样,在本地运行时,也可以保证环境的一致性。
步骤的第3步,是由Volta通过volta pin命令在package.json中生成的volta字段。当进入项目的目录时,Volta自动切换到指定版本。不用像nvm那样手动操作了。
在终端输入命令:
curl https://get.volta.sh | base
就会下载安装了:

输入volta pin node@22.17.0

就会在package.json中生成volta字段:

当执行pnpm install时,pnpm会去校验devEngines.runtime的版本,查下版本是否符合。如果符合,就会安装依赖。如果指定的版本低于devEngines.runtime要求的版本范围,就会下载该版本以解决不匹配的问题。
{
"devEngines": {
"runtime": {
"name": "node",
"version": "^22.17.0",
"onFail": "download"
}
},
"volta": {
"node": "22.17.0"
}
}
devEngines.runtime是使用下面这个模式来定义的字段:
interface DevEngines {
os?: DevEngineDependency | DevEngineDependency[];
cpu?: DevEngineDependency | DevEngineDependency[];
libc?: DevEngineDependency | DevEngineDependency[];
runtime?: DevEngineDependency | DevEngineDependency[];
packageManager?: DevEngineDependency | DevEngineDependency[];
}
interface DevEngineDependency {
name: string;
version?: string;
onFail?: 'ignore' | 'warn' | 'error' | 'download';
}
onFail属性是验证失败了要怎样处理,支持4个值:
ignore:无
warn:打印警告的信息内容,但是不会退出,然后继续下一步的操作
error:打印错误的信息内容,然后退出
download:这是pnpm10.14目前支持的值,会通过下载指定的版本来解决验证失败的问题。
download值可以用pnpm在指定的版本范围中去下载。
devEngines.runtime就是检查一下环境的兼容性,然后通过配置的"onFail": "download"来下载一个运行时安装版本。但是并没有执行版本切换,要执行的话还需要volta这个“一次配置,全自动切换”的管理运行时版本的智能工具。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。