Node.js 23 版本为开发者带来了众多新特性和改进。让我们深入探讨这些变化,并通过实际代码示例展示如何使用这些新功能。
Node.js 23 新特性
1. 内置 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('连接已关闭');
});
2. 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('Hello');
controller.enqueue('World');
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);
3. 全局 Blob 和 BroadcastChannel API
现在可以在 Node.js 中全局使用 Blob 和 BroadcastChannel API。
Blob 示例
const blob = new Blob(['你好,世界!'], { type: 'text/plain' });
const text = await blob.text();
console.log(text); // 输出:你好,世界!
BroadcastChannel 示例
const channel = new BroadcastChannel('test_channel');
channel.postMessage('你好,通道!');
channel.onmessage = (event) => {
console.log('收到消息:', event.data);
};
4. 本机 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
5. 实验性 TypeScript 剥离
Node.js 23 引入了实验性的 TypeScript 剥离功能,允许直接运行 TypeScript 文件。
示例代码(hello.ts)
function greet(name: string): string {
return `你好,${name}!`;
}
console.log(greet('Leavescn'));
运行命令
node --experimental-strip-types hello.ts
6. 内置文件监控
Node.js 23 内置了文件监控功能,消除了使用 nodemon 等第三方工具的需要。
示例代码(app.js)
console.log('服务器正在运行...');
// 模拟服务器逻辑
setInterval(() => {
console.log('处理请求...');
}, 2000);
运行命令
node --watch app.js
现在,每次修改 app.js 文件时,Node.js 都会自动重启应用程序。
7. 本机环境变量支持
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
8. 测试运行器模块
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 引入了许多新特性和改进,使 Node.js 成为一个更强大、更用户友好的 JavaScript 运行时环境。通过这些实际代码示例,开发者可以更好地理解和利用这些新功能,提高开发效率和代码质量。