一、用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的支持方法

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

具体配置步骤如下:

  1. 在项目根目录的package.json中添加devEngines.runtimes,指定运行时Node.js版本的范围:
// 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的配置是可以覆盖根目录配置的:
// packages/app/package.json
{
"devEngines": {
"runtime": {
"name": "node",
"version": "^18.20.8",
"onFail": "download"
}
}
}
  1. 结合node的版本管理工具volta实现版本切换:
{
"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的版本,查下版本是否符合。如果符合,就会安装依赖。如果volta指定的版本低于devEngines.runtime要求的版本范围,pnpm就会警告版本不匹配。

完整的package.json配置:

{
"devEngines": {
"runtime": {
"name": "node",
"version": "^22.17.0",
"onFail": "download"
}
},
"volta": {
"node": "22.17.0"
}
}

四、总结

devEngines.runtime就是检查一下环境的兼容性,然后报个警给你而已。那么执行力这块,还需要volta这个“一次配置,全自动切换”的管理运行时版本的智能工具。

pnpm 10.14 支持JavaScript运行时的安装了的更多相关文章

  1. 教你如何检查一个函数是否为JavaScript运行时环境内建函数

    在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...

  2. 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序。

    原文 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序. 本文的内容 已安装与配置的应用程序 删除配置的应用程序 安装与配置的应用程序^ 在介绍如何删除所 ...

  3. Reverse Core 第二部分 - 14&15章 - 运行时压缩&调试UPX压缩的notepad

    @date: 2016/11/29 @author: dlive 0x00 前言 周六周日两天在打HCTF2016线上赛,没时间看书,打完比赛接着看~~ 0x01 运行时压缩 对比upx压缩前后的no ...

  4. [转]UIWebView的Javascript运行时对象

    An alternative, that may get you rejected from the app store, is to use WebScriptObject. These APIs ...

  5. 解决 mac 10.14.4 无法 sublime text 3207 安装 Package Control,以及安装第三方包报错 `Package Control There are no packages available for installation`

    下载最新的 sublime text 3207,无法安装 Package Control. 根据官方提示,手动安装 Package Control. 手动安装 Package Control 后,无法 ...

  6. JavaScript是如何工作的:引擎,运行时和调用堆栈的概述!

    摘要: 理解JS执行原理. 原文:JavaScript是如何工作的:引擎,运行时和调用堆栈的概述! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 本文是旨在深入研究JavaScrip ...

  7. 解读JavaScript 之引擎、运行时和堆栈调用

    转载自开源中国 译者:Tocy, 凉凉_, 亚林瓜子, 离诌 原文链接 英文原文:How JavaScript works: an overview of the engine, the runtim ...

  8. 解读 JavaScript 之引擎、运行时和堆栈调用

    https://www.oschina.net/translate/how-does-javascript-actually-work-part-1 随着 JavaScript 变得越来越流行,很多团 ...

  9. Visual C++中对运行时库的支持

    原文地址:http://blog.csdn.net/wqvbjhc/article/details/6612099 一.什么是C运行时库 1)C运行时库就是 C run-time library,是 ...

  10. JavaScript是如何工作的01:引擎,运行时和调用堆栈的概述!

    概述 几乎每个人都已经听说过 V8 引擎,大多数人都知道 JavaScript 是单线程的,或者它使用的是回调队列. 在本文中,我们将详细介绍这些概念,并解释 JavaScrip 实际如何运行.通过了 ...

随机推荐

  1. CsvHelper简单使用

    发现一个比较好用的处理csv的C#库,CsvHelper: CsvHelper是一个用于读取和写入CSV文件的C#库,支持自动类型转换.自定义类型转换器和灵活的映射选项等功能,使得读写CSV文件变得非 ...

  2. 晴神宝典之C /C++快速入门

    OJ 补充:runtime error通常原因是数组越界,除零,异常调用,堆栈溢出 尽可能远离TLE 选择c++ 输入输出使用printf和scanf basis 变量名取名: (1)不能是c语言标识 ...

  3. XML注入

    XML注入 复现使用的题目为buuoj中的[NCTF2019]Fake XML cookbook 1和[NCTF2019]True XML cookbook 1 参考链接为https://xz.ali ...

  4. SuperSocket 2.0 的发布标志着.NET Socket 服务器框架迈入了一个全新的时代

    2025 年 4 月 20 日 - SuperSocket 团队自豪地宣布正式发布 SuperSocket 2.0,这是这款适用于 .NET 的高性能.可扩展套接字服务器应用程序框架的一个重要里程碑. ...

  5. golang unsafe遇上字符串拼接优化导致的bug

    最近料理老项目的时候被unsafe坑惨了,这里挑一个最不易察觉的错误记录一下. 这个问题几乎影响近几年来所有的go版本,为了方便讨论我就用最新版的1.24.3做例子了. 线上BUG 我们有一个收集集群 ...

  6. 腾讯IMA VS 飞书知识问答:谁才是2025最强AI知识库?

    AI创业失败,可私聊经验教训分享... 前几天小伙伴在讨论我开发的一套社群运营AI分身,其本质其实是一套个人知识库的AI产品,其依赖的就是我过往发布的文章. 这类AI聊天分身,最简单.不考虑" ...

  7. odoo16里面的常用方法

    一.全局搜索与显示 def name_get(self): res = [] for order in self: name = order.name if order.draw_number: na ...

  8. 最炫酷的企业 AI 助手来啦(含前端源码)!

    最近越来越多的企业开始将 MaxKB 在他们企业当中的应用场景官宣了.有时候我们会疑问,这真的是 MaxKB 做的吗? MaxKB 你怎么还能动的? 案例一:医疗资源小助手开场白 效果展示: 源码: ...

  9. Spring Boot中使用注解实现简单工厂模式

    前言 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂模式(Simple Factory Pattern),但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出接 ...

  10. IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法

    问题描述 欲在IntelliJ IDEA中提交文件至SVN,但是在项目文件上点击右键时,发现右键菜单中没有Subversion的选项,正常情况下是要有的,如下图所示: 图0 解决办法 点击菜单:VCS ...