专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序员的那些事  ·  被骂了!腾讯道歉 + 立刻改正 ·  4 天前  
OSC开源社区  ·  华为新笔记本被曝预装Linux系统 ·  3 天前  
OSC开源社区  ·  三句话让老板直接给我主动放假 ·  5 天前  
编程技术进阶  ·  超详细的 Manus 分析报告流出(速领,待会删) ·  3 天前  
编程技术进阶  ·  超详细的 Manus 分析报告流出(速领,待会删) ·  3 天前  
51好读  ›  专栏  ›  OSC开源社区

Node.js开始反击

OSC开源社区  · 公众号  · 程序员  · 2024-11-19 17:53

正文

↓推荐关注↓


2018 年, Node.js 之父 Ryan Dahl 推出了全新的 JavaScript 运行时 Deno ,旨在解决Node.js中一些长期存在的问题,同时提供增强的安全性和现代语言特性。到了2022年,另一个名为 Bun 的 JavaScript 运行时横空出世 ,在开发社区内引发了广泛讨论。

这两个新兴的运行时之所以受到如此多的关注,很大程度上反映了开发者们对Node.js现状的不满以及对新解决方案的渴望,然而,尽管它们带来了许多创新和改进,但由于历史原因以及 Node.js 庞大的生态系统构建等因素,许多开发者仍然持观望态度。

面对这些新兴竞争者的挑战,Node.js 似乎感受到了前所未有的危机感,开始反击,推出了一系列实用功能,解决了许多痛点问题。下面就来看看 Node.js 近来都引入了哪些实用功能!

Node.js v20.0

  • 权限模型(实验性功能) :Node.js 20 引入了权限模型,它允许开发者在程序执行期间限制对特定资源的访问,例如文件系统操作、子进程生成和工作线程创建。

  • 原生测试运行器 :Node.js 20 中, test_runner 模块被标记为稳定,这意味着它已经准备好用于生产环境。稳定的测试运行器包括编写和运行测试所需的基本组件,如 describe it / test 和钩子来构建测试文件、模拟、监视模式以及 node --test 用于并行运行多个测试文件。

Node.js v20.6

  • 原生支持 .env 文件 :引入了对 .env 文件的原生支持,允许开发者直接在Node.js中使用 .env 文件配置环境变量,无需依赖第三方模块(如 dotenv )。

Node.js v21.0

  • 内置 WebSocket 客户端(实验性功能): Node.js v21.0提供了一个实验性的、与浏览器兼容的WebSocket实现。开发者可以通过标志(--experimental-websocket)启用该功能,从而更方便地在Node.js环境中使用WebSocket。

  • 自由切换默认模块系统(实验性功能): 引入了一个新的实验性标志( --experimental-default-type ),用于切换Node.js使用的默认模块系统。这一功能允许开发者在ES模块和CommonJS之间灵活切换,以满足不同的项目需求。

Node.js v21.7

  • 内置彩色文本输出: 支持通过 console.log 间接输出彩色文本,无需再引入第三方库(如 chalk ),可以通过 util.styleText 函数来设置文本的颜色和样式。

  • 环境变量功能增强 :新增了两个API来加载和解析环境变量

    • process.loadEnvFile(path) 用于加载指定路径的 .env 文件。如果未指定路径,则会自动加载当前目录下的 .env 文件。

    • util.parseEnv(content) 用于解析包含环境变量赋值的字符。

Node.js v22.0

  • 监听模式: 从Node.js 22版本开始,观察模式( node --watch )已经稳定。在监听模式下,当被监视的文件发生变化时,Node.js进程将自动重新启动,不再需要借助第三方模块(如 nodemon )。

  • 内置 WebSocket 客户端(稳定版): 内置 WebSocket 客户端成为于稳定功能,不再需要 --experimental-websocket 标志来启用。WebSocket的实现遵循了浏览器中WebSocket API的标准,这意味着在Node.js中使用WebSocket的方式将与在JavaScript中使用WebSocket的方式非常相似。

  • 支持通过require()引入ESM :打破了CommonJS与ESM之间的界限,允许开发者使用require()函数来导入ESM 模块。这为大型项目和遗留系统提供了一个平滑过渡的方案,因为它们可以逐个模块迁移到ESM,而不是一次性对整个项目进行修改。

  • 支持运行 package.json 中的脚本: 添加了一个新命令行标志 --run ,允许直接从命令行执行package.json中定义的脚本。这提供了一个标准化的方式执行脚本,有助于统一不同包管理器在处理脚本时的行为,并且直接使用node执行脚本要比通过npm执行脚本更快。

Node.js v22.5

  • 支持 SQLite 数据库(实验性功能) :在这个版本中,Node.js自带了SQLite模块,开发者可以直接在程序中使用SQLite数据库,而无需引入第三方库。

Node.js v22.6

  • 原生支持TypeScript(实验性功能) :通过 --experimental-strip-types 标志,实现了对TypeScript的实验性支持。这意味着开发者们现在可以在Node.js环境中直接执行 .ts 文件,而无需进行额外的编译步骤。然而,需要注意的是,当前的实验性支持有一些限制,例如仅支持内联类型注释,不支持像 enums、namespaces 这样的高级TypeScript功能。此外,Node.js不会读取 tsconfig.json 文件,因此在运行时不会进行类型校验。

  • 网络检测支持(实验性功能): 为 Node.js 引入了网络检查的初步支持。这是一个实验性功能,需要使用







请到「今天看啥」查看全文