刚发布的nodejs 23提供了什么新能力?

76 阅读2分钟

Node.js 23版本为开发者带来了许多新的功能和改进。让我们深入了解这些变化,并通过实际代码示例来展示如何使用这些新特性。

内置WebSocket客户端API

Node.js 23现在内置了WebSocket客户端API,无需再使用第三方库。这大大简化了WebSocket的使用。

示例代码:

const WebSocket = require('node:ws');

const ws = new WebSocket('ws://example.com:8080');

ws.on('open', function open() {
  console.log('连接已建立');
  ws.send('你好,服务器!');
});

ws.on('message', function incoming(data) {
  console.log('收到消息:', data.toString());
});

ws.on('close', function close() {
  console.log('连接已关闭');
});

Web Streams API

Node.js 23引入了Web Streams API,使得处理流数据更加方便。

示例代码:

const { ReadableStream, WritableStream, TransformStream } = require('node:stream/web');

const readableStream = new ReadableStream({
  start(controller) {
    controller.enqueue('你好');
    controller.enqueue('世界');
    controller.close();
  }
});

const transformStream = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  }
});

const writableStream = new WritableStream({
  write(chunk) {
    console.log(chunk);
  }
});

readableStream
  .pipeThrough(transformStream)
  .pipeTo(writableStream);

全局Blob和BroadcastChannel API

Blob和BroadcastChannel API现在可以在全局范围内使用。

Blob示例:

const blob = new Blob(['Hello, 世界!'], { type: 'text/plain' });
const text = await blob.text();
console.log(text);  // 输出: Hello, 世界!

BroadcastChannel示例:

const channel = new BroadcastChannel('test_channel');

channel.postMessage('你好,频道!');

channel.onmessage = (event) => {
  console.log('收到消息:', event.data);
};

原生ESM支持

Node.js 23进一步增强了对ECMAScript模块(ESM)的支持。

示例代码(math.mjs):

export function add(a, b) {
  return a + b;
}

export function multiply(a, b) {
  return a * b;
}

使用模块(main.mjs):

import { add, multiply } from './math.mjs';

console.log(add(5, 3));       // 输出: 8
console.log(multiply(4, 2));  // 输出: 8

实验性TypeScript剥离

Node.js 23引入了实验性的TypeScript剥离功能,可以直接运行TypeScript文件。

示例代码(hello.ts):

function greet(name: string): string {
  return `你好,${name}!`;
}

console.log(greet('张三'));

运行命令:

node --experimental-strip-types hello.ts

内置文件监视

Node.js 23内置了文件监视功能,无需使用第三方工具如nodemon。

示例代码(app.js):

console.log('服务器正在运行...');

// 模拟服务器逻辑
setInterval(() => {
  console.log('处理请求中...');
}, 2000);

运行命令:

node --watch app.js

现在,每当你修改app.js文件时,Node.js会自动重启应用。

原生环境变量支持

Node.js 23支持直接加载.env文件,无需使用dotenv等库。

示例.env文件:

DB_HOST=localhost
DB_USER=root
DB_PASS=password123

示例代码(config.js):

console.log(process.env.DB_HOST);
console.log(process.env.DB_USER);
console.log(process.env.DB_PASS);

运行命令:

node --env-file=.env config.js

测试运行器模块

Node.js 23引入了实验性的node:test模块,方便创建和运行JavaScript测试。

示例代码(test.js):

const test = require('node:test');
const assert = require('node:assert');

test('简单的加法测试', (t) => {
  assert.strictEqual(1 + 2, 3);
});

test('异步测试', async (t) => {
  const result = await Promise.resolve(42);
  assert.strictEqual(result, 42);
});

运行测试:

node --test test.js

这些新特性和改进使得Node.js 23成为一个更加强大和易用的JavaScript运行时环境。通过这些实际的代码示例,开发者可以更好地理解和利用这些新功能,提高开发效率和代码质量。