pnpm 10.14 支持JavaScript运行时的安装了

pnpm 10.14支持直接JavaScript运行时的安装了,这样可以用它声明的版本进行运行时的下载安装。

在pnpm 10.14之前,package.json中声明的版本如果是低于项目要求的版本,也就只能警告而已。

一、用corepack管理pnpm来支持运行时安装功能

在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运行时的安装了。

二、pnpm 10.14中使用devEngines.runtimes来支持

那我们在Monorepo项目中,要怎样配置呢?

具体配置步骤如下:

  1. 在项目根目录的package.json中添加devEngines.runtimes,指定运行时Node.js版本的范围:
json 复制代码
// package.json
{
  "devEngines": {
    "runtime": {
      "name": "node",
      "version": "^22.17.0",
      "onFail": "download" // we only support the "download" value for now
    }
  }
}
  1. 在子目录,也就是packages/app/package.json的配置是可以覆盖根目录配置的:
json 复制代码
// packages/app/package.json
{
  "devEngines": {
    "runtime": {
      "name": "node",
          "version": "^18.20.8",
          "onFail": "download"
    }
  }
}
  1. 结合node的版本管理工具volta实现版本切换:
json 复制代码
{
  "volta": {
        "node": "18.20.8",
        "pnpm: "9.15.4"
  }
}

当执行pnpm install时,如果你本地的开发环境的Node.js版本比如是16.x,而与项目所需要的版本是22.17。那么,就会通过你指定的版本范围去匹配:

锁文件(lockfile)会保存运行时的版本,以及校验和(checksum)。这样,在本地运行时,也可以保证环境的一致性。

三、用Volta自动切换版本

在配置步骤中第3步,是由Volta通过volta pin命令在package.json中生成的volta字段。当进入项目的目录时,Volta会自动切换到指定版本。不用像nvm那样手动操作了。

安装 Volta

在终端输入命令:

curl https://get.volta.sh | base

就会下载安装了:

指定Node的版本

输入volta pin node@22.17.0

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

pnpm校验devEngines版本

当执行pnpm install时,pnpm会去校验devEngines.runtime的版本,查下版本是否符合。如果符合,就会安装依赖。如果指定的版本低于devEngines.runtime要求的版本范围,就会下载该版本以解决不匹配的问题。

完整的package.json配置:

json 复制代码
{
  "devEngines": {
    "runtime": {
      "name": "node",
      "version": "^22.17.0",
      "onFail": "download"
    }
  },
  "volta": {
    "node": "22.17.0",
    "pnpm": "10.14.0"
  }
}

四、devEngines字段的定义

devEngines.runtime是使用下面这个模式来定义的字段:

ini 复制代码
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这个"一次配置,全自动切换"的管理运行时版本的智能工具。

相关推荐
福兮说9 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理9 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66610 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)10 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan11 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_11 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒12 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技12 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu12 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙13 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript