网站首页 > 博客文章 正文
大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
2024 年 4 月 24 日 Node.js 22 如期发布,众多亮点包括:ES 模块支持 require、WebSocket 客户端支持、V8 JavaScript 引擎更新等等。
另外值得注意的是,Node.js 18 将于 2025 年 4 月终止生命周期,因此非常建议开发者升级到 Node.js 20 (LTS) 或 Node.js 22(即将成为 LTS)。
重点关注点 1:支持 require() 同步 ESM
下面是 CJS、ESM 模块的代码示例:
// 下面是 CJS 模块
const a = require("./a")
module.exports = {a, b: 2}
// 下面是 EMS
import a from "./a"
export default {a, b: 2}
两种模块方式互不兼容,而且迁移非常麻烦。因此,Node.js 贡献者一开始决定对 ESM 语法使用新的文件扩展名,即. mjs。
因此,在声明一个公共的库的时候,开发者通常有两种选择:
- 忽略 ESM 依然采用 CommonJS
- 将 ESM 与 Babel 转译器结合使用
- 同时支持 ESM 和 CommonJS
然而,Node.js 已经提供了对 ES7 和 ES8 的全面支持,如果还需要转译代码才能通过 ESM 语法导出和导入模块确实多少有点不合时宜。
Node.js 22 版本通过 --experimental-require-module 标志添加对同步 ESM 的 require支持。如果启用了该标志,并且 require() 加载的 ECMAScript 模块满足以下要求:
- 在最近 package.json 或 .mjs 扩展名中使用 "type": "module" 字段显式标记为 ES 模块
- 完全同步、不包括 top-level-await,例如:await Promise.resolve(console.log(''));
require() 会将请求的模块作为 ES 模块加载并返回模块名称空间对象 (Name Space Object)。 该模式与动态 import() 非常类似,但是会同步运行(Run Synchronously )并直接返回名称空间对象。 同时,require(esm) 最终还会在不久的将来完全摒弃 flag 标记。
重点关注点 2:Node.js 22 其他重大变化
除了上面说明的支持 require() 同步 ESM外,下面也是 Node.js 22 版本带来的诸多值得关注的变化。
- V8 版本更新到 12.4,包括 WebAssembly 垃圾收集、Array.fromAsync、Set 方法和迭代器帮助程序等新功能。
- V8 的 Maglev 编译器在支持的架构上默认启用 (https://v8.dev/blog/maglev),Maglev 显著提高了 CLI 程序的性能。
- Node.js 22 包含一个新的实验性功能,用于使用 cli 标志 node --run <script-in-package-json> 从 package.json 执行脚本,其还支持 node --run test 在 package.json 脚本中执行测试命令。
- 将 Stream 的默认高水位线(Stream default High Water Mark)从 16KiB 增加到 64KiB,从而带来全面的性能提升,但是鼓励内存敏感环境中的用户显式设置 setDefaultHighWaterMark。
- 从 Node.js 22 版本开始,watch 模式基本稳定。 当处于 watch 模式时,监视文件中的更改会导致 Node.js 进程重新启动。
- 默认情况下将启用 WebSocket 的浏览器兼容实现,为 Node.js 提供了一个 WebSocket 客户端,无需外部依赖。
- 向 node:fsmodule 添加了用于模式匹配的 glob 和 globSync 函数。 开发人员现在可以利用这些函数根据指定模式匹配文件路径。
- 支持 AbortSignal 性能优化
参考资料
https://nodejs.org/en/blog/announcements/v22-release-announce#running-packagejson-scripts
https://dev.to/emmabase/nodejs-22-is-live-49b1
https://www.codingame.com/playgrounds/5262/native-es-modules-in-node-js
https://www.youtube.com/watch?v=teDVlOjOCT0
猜你喜欢
- 2024-09-17 Node.js 22 发布(node.js还火吗)
- 2024-09-17 京东到家Loki日志系统实践(京东到家早起打卡入口)
- 2024-09-17 从 Element UI 源码的构建流程来看前端 UI 库设计
- 2024-09-17 跨页面通信的各种姿势(页面和跨页)
- 2024-09-17 第一届技术博文征文活动开启(庞博文图片)
- 2024-09-17 七天速记前端八股文(重点)(前端八股文文档)
- 2024-09-17 基于Swoole的高性能系统监控及Nginx负载均衡的实现
- 2024-09-17 Nodejs异步Generator函数和Websockets
- 2024-09-17 我用这11招,让接口性能提升了100倍
- 2024-09-17 超实用!程序员必备工具软件清单,来自腾讯工程师们的分享
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)