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

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

前言

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)
    );
  });
});

相关文章

最美 Linux 发行版之争还在继续,Elementary OS 0.3 发布 0.3 Freya 更新

对于个人终端消费者而言,Linux 发行版们依然希望通过 UI 革新来吸引他们的注意。除了 Ubuntu 这样综合能力强的选手,偏重界面的发行版里,前有 OpenSUSE,后有 Linux Mint,...

同事git push到主分支上了,技术总监怒了

事情是这样的,同事前几天提交使用git提交代码的时候不小心提交到主分支上了,关键还提交成功了,这可是他自己开发的模块,还没测试的呢。技术总监也知道了,这下他慌乱了。最后还是技术总监给他兜底了。为了防止...

java调用API操作GitLab(java调用zabbix api)

最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查...

jenkins+gitlab 实现自动化部署(gitlab触发jenkins)

目录1、安装jdk,要记住安装路径2、安装maven,要记住安装路径3、安装git,要记住安装路径4、安装gitlab5、安装jenkins(centos7)创建安装目录下载通用war包启动和关闭Je...

K8s 的 Namespace 到底解决了什么问题?

在 Kubernetes 的世界里,资源调度、服务编排以及自动化运维构成了它强大的基础架构能力。但随着集群规模的扩大和团队协作复杂度的提升,仅靠原始的资源管理手段已经难以支撑多租户或大型项目的管理需求...

15款测试html5响应式的在线工具(测试类h5)

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面...