Node.js全局对象全解析及应用场景

在 Node.js 环境中,全局对象是 global
,它类似于浏览器环境中的 window
对象。global
对象提供了许多内置的属性和方法,可以在任何模块中直接访问,而无需显式引入。以下是一些常见的 Node.js 全局对象和它们的用途:
1. global
global
是 Node.js 的全局命名空间对象,所有全局变量和函数都是global
对象的属性。- 例如,
setTimeout
、console
等都是global
的属性。
2. __filename
- 当前模块文件的绝对路径。
- 例如:
/Users/username/project/index.js
3. __dirname
- 当前模块文件所在目录的绝对路径。
- 例如:
/Users/username/project
4. process
process
是一个全局对象,提供了与当前 Node.js 进程相关的信息和控制。- 常用属性:
process.argv
:命令行参数数组。process.env
:环境变量对象。process.cwd()
:当前工作目录。process.pid
:当前进程的 PID。
- 常用方法:
process.exit()
:退出当前进程。process.nextTick()
:将回调函数放入事件循环的下一个 tick 中执行。
5. module
module
是当前模块的引用,包含模块的元信息。- 常用属性:
module.exports
:定义模块的导出内容。module.id
:模块的标识符(通常是文件的绝对路径)。module.parent
:引用加载当前模块的父模块。
6. exports
exports
是module.exports
的引用,用于导出模块的功能。- 注意:直接赋值
exports
会断开与module.exports
的引用,因此通常使用module.exports
。
7. require
require
是一个函数,用于加载模块。- 例如:
const fs = require('fs');
8. Buffer
Buffer
是用于处理二进制数据的类。- 例如:
const buf = Buffer.from('Hello');
9. setTimeout
/ setInterval
/ clearTimeout
/ clearInterval
- 用于定时任务的调度和取消。
- 例如:
setTimeout(() => console.log('Hello'), 1000);
10. console
- 提供控制台输出功能。
- 常用方法:
console.log()
:输出信息。console.error()
:输出错误信息。console.warn()
:输出警告信息。
11. URL
和 URLSearchParams
- 用于解析和操作 URL。
- 例如:
const myURL = new URL('https://example.com/path?query=123'); console.log(myURL.searchParams.get('query')); // 输出 '123'
12. TextEncoder
和 TextDecoder
- 用于处理文本编码和解码。
- 例如:
const encoder = new TextEncoder(); const uint8Array = encoder.encode('Hello');
13. queueMicrotask
- 用于将微任务加入事件循环。
- 例如:
queueMicrotask(() => console.log('Microtask executed'));
14. AbortController
和 AbortSignal
- 用于取消异步操作。
- 例如:
const controller = new AbortController(); const signal = controller.signal; fetch('https://example.com', { signal }).catch(err => console.log(err)); controller.abort();
15. performance
- 提供高精度的时间测量功能。
- 例如:
const start = performance.now(); // 执行一些操作 const end = performance.now(); console.log(`耗时:${end - start} 毫秒`);
16. structuredClone
- 用于深拷贝对象。
- 例如:
const obj = { a: 1, b: { c: 2 } }; const clonedObj = structuredClone(obj);
17. EventTarget
和 Event
- 用于实现事件驱动的编程模型。
- 例如:
const eventTarget = new EventTarget(); eventTarget.addEventListener('customEvent', () => console.log('Event triggered')); eventTarget.dispatchEvent(new Event('customEvent'));
18. WebAssembly
- 用于加载和运行 WebAssembly 模块。
- 例如:
const wasmBuffer = fs.readFileSync('module.wasm'); WebAssembly.instantiate(wasmBuffer).then(result => { console.log(result.instance.exports.add(1, 2)); // 假设模块导出了 add 函数 });
19. MessageChannel
和 MessagePort
- 用于实现线程间通信。
- 例如:
const { port1, port2 } = new MessageChannel(); port1.postMessage('Hello'); port2.on('message', (msg) => console.log(msg)); // 输出 'Hello'
20. Worker
- 用于创建多线程工作线程。
- 例如:
const worker = new Worker('./worker.js'); worker.postMessage('Start'); worker.on('message', (msg) => console.log(msg));
总结
Node.js 的全局对象提供了丰富的功能,涵盖了从文件系统操作到网络请求、定时任务、事件处理等多个方面。理解这些全局对象及其用法,对于开发高效、可靠的 Node.js 应用程序至关重要。