当前位置:首页 > 技术文章 > 正文内容

Nodejs 迎来了有史以来的最大的 9 个更新!

zonemu2个月前 (08-07)技术文章29

前言

Nodejs23 来啦!迎来了九个重大更新!!!

网络通信

原生 WebSocket 客户端支持

import WebSocket from 'node:ws';

const ws = new WebSocket('wss://api.realtime.io');

// 事件驱动架构
ws.on('open', () => ws.send('SYNC_REQUEST'));
ws.on('message', ({ data }) => {
  console.log('实时数据:', data);
  handleRealtimeUpdate(JSON.parse(data));
});

Web Streams API深度整合

import { TransformStream } from'node:stream/web';

// 创建转换流处理流水线
const markdownParser = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(`
      <pre><code>${chunk}</code></pre>
    `);
  }
});

fetch('/log.stream')
  .then(res => res.body)
  .pipeThrough(markdownParser)
  .pipeTo(new WritableStream({
    write: chunk =>document.body.innerHTML += chunk
  }));

开发效率

零配置文件监视

node --watch --env-file=.env ./src/main.ts

环境变量原生支持

.env文件自动加载机制:

# 支持多环境配置
DATABASE_URL=postgres://prod:password@db.prod.com
JWT_SECRET=sup3r_s3cr3t_k3y
// 直接访问注入的环境变量
const pool = new Pool({
  connectionString: process.env.DATABASE_URL
});

现代化语言

ESM模块化新范式

// 模块注册表
import { createRegistry } from 'node:module';
const registry = new createRegistry();

// 支持import maps
registry.register('@lib/*', './src/libs/*.mjs');

// 动态导入
const { GraphQLServer } = await import('@lib/server');

TypeScript实验性支持

通过--experimental-strip-types标志实现编译优化

// 直接运行TS文件
interface User {
  id: string;
  name: string;
}

export function createUser(user: User) {
  // 类型安全操作
  db.insert(user); 
}

跨进程通信

BroadcastChannel API

// 主进程
const adminChannel = new BroadcastChannel('cluster_ctl');
adminChannel.postMessage({ type: 'HEALTH_CHECK' });

// 工作进程
const workerChannel = new BroadcastChannel('cluster_ctl');
workerChannel.onmessage = ({ data }) => {
  if(data.type === 'HEALTH_CHECK') {
    reportStatus();
  }
};

Blob全局化

// 大文件分片上传
asyncfunction uploadFile(blob) {
const CHUNK_SIZE = 5 * 1024 * 1024; // 5MB

for(let i=0; i<blob.size; i+=CHUNK_SIZE){
    const chunk = blob.slice(i, i+CHUNK_SIZE);
    await fetch('/upload', {
      method: 'POST',
      body: chunk
    });
  }
}

测试

内置测试运行器

import { test, mock } from'node:test';
import assert from'node:assert';

test('用户认证流程', async (t) => {
const authMock = mock.fn(() =>Promise.resolve(true));

await t.test('正常登录', async () => {
    const result = await login('admin', '123456', authMock);
    assert.ok(result);
  });

await t.test('错误密码', async () => {
    await assert.rejects(
      login('admin', 'wrong', authMock)
    );
  });
});

相关文章

快速上手React(快速上手的高级表达)

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等...

(在线编辑DWG)网页CAD二开实现焊接符号绘制

前言在工程制图和制造领域,焊接符号(Welding Symbols)是用于表示焊缝类型、尺寸、位置以及工艺要求的标准化图形语言。广泛应用于机械设计、钢结构、船舶制造、压力容器等行业中,帮助技术人员理解...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位...

100行Html5+CSS3+JS代码实现元旦倒计时界面

一、前言2022年到了,祝大家虎年大吉喜气临,昂首摆尾迎春来。双眼圆睁看世界,万水千山尽开颜。胡须翘翘美姿态,人人开心祝平安。巨大身躯摇摆摆,坎坷困境当笑谈。愿你虎年万事顺,吉星高照旺旺旺!二、202...

web前端是什么,在哪些地方有应用,html和html5区别都在这里了

web前端是什么,在哪些地方有应用简介web前端开发技术什么是html、html5什么是css、css3什么是js,javascriptweb前端的应用大家好,我是ots_luo,很多小伙伴不知道we...

HTML5培训学习(简单明了)(html5教学视频教程)

这些事HTML5培训认为在学习HTML5前应该做好的准备,欢迎参考指正:为什么学习HTML5?软硬件环境介绍HTML5环境搭建常见问题解决掌握技能需求为什么学习HTML5?1:自从2010年HTML5...