在 Node.js 中,全局变量是在所有模块中都可以访问的变量。以下是一些常见的 Node.js 全局变量:
1. global
- 说明:
global是 Node.js 中的全局对象,类似于浏览器环境中的window对象。在 Node.js 中,任何定义在global对象上的属性都可以在整个应用程序的任何模块中访问。 - 示例:
// 在全局对象上定义一个属性
global.myGlobalVariable = 'Hello, Global!';
// 在另一个模块中访问该属性
console.log(global.myGlobalVariable);
2. __dirname
- 说明:
__dirname表示当前执行脚本所在的目录的绝对路径。它是一个字符串,在每个模块中都可以直接使用。 - 示例:
console.log(__dirname);
3. __filename
- 说明:
__filename表示当前执行脚本的绝对路径,包含文件名。它也是一个字符串,可在每个模块中直接使用。 - 示例:
console.log(__filename);
4. module
- 说明:
module是一个代表当前模块的对象。每个 Node.js 文件都被视为一个模块,module对象包含了与该模块相关的信息,如exports属性用于导出模块的公共接口。 - 示例:
console.log(module.id); // 模块的标识符,通常是文件的路径
console.log(module.exports); // 模块导出的内容
5. exports
-
说明:
exports是module.exports的一个引用,用于导出模块的公共接口。通过向exports对象添加属性和方法,可以将它们暴露给其他模块使用。 -
示例:
// 导出一个函数
exports.sayHello = function() {
console.log('Hello!');
};
6. require
-
说明:
require是一个用于加载其他模块的函数。通过require可以引入本地模块、内置模块或第三方模块。 -
示例:
// 引入内置的 fs 模块
const fs = require('fs');
// 读取文件
fs.readFile('test.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
7. process
- 说明:
process是一个全局对象,提供了与当前 Node.js 进程相关的信息和控制方法。可以使用它来获取环境变量、命令行参数、监听进程事件等。 - 示例:
// 获取命令行参数
console.log(process.argv);
// 获取环境变量
console.log(process.env.NODE_ENV);
// 监听进程退出事件
process.on('exit', (code) => {
console.log(`Process exiting with code: ${code}`);
});
8. Buffer
- 说明:
Buffer类是 Node.js 中用于处理二进制数据的全局类。在处理网络流、文件操作等场景时,经常需要使用Buffer来处理二进制数据,比如读写文件、处理 TCP 流等。 - 示例:
// 创建一个包含字符串的 Buffer
const buffer = Buffer.from('Hello, Buffer!', 'utf8');
console.log(buffer);
// 将 Buffer 转换为字符串
console.log(buffer.toString('utf8'));
9. clearImmediate
- 说明:用于取消通过
setImmediate方法设置的立即执行的回调函数。setImmediate会将回调函数加入到事件循环的下一个迭代中立即执行。 - 示例:
const immediate = setImmediate(() => {
console.log('This will be executed immediately');
});
// 取消立即执行的回调
clearImmediate(immediate);
10. clearInterval
- 说明:用于取消通过
setInterval方法设置的定时重复执行的回调函数。setInterval会按照指定的时间间隔重复执行回调函数。 - 示例:
const interval = setInterval(() => {
console.log('This will be executed every 1000 milliseconds');
}, 1000);
// 取消定时执行的回调
clearInterval(interval);
11. clearTimeout
- 说明:用于取消通过
setTimeout方法设置的延迟执行的回调函数。setTimeout会在指定的延迟时间后执行回调函数。 - 示例:
const timeout = setTimeout(() => {
console.log('This will be executed after 2000 milliseconds');
}, 2000);
// 取消延迟执行的回调
clearTimeout(timeout);
12. queueMicrotask
- 说明:用于将一个微任务加入到微任务队列中。微任务会在当前宏任务执行结束后、下一个宏任务开始之前执行。
- 示例:
console.log('Start');
queueMicrotask(() => {
console.log('This is a microtask');
});
console.log('End');
// 输出顺序:Start -> End -> This is a microtask
13. setImmediate
- 说明:将回调函数加入到事件循环的下一个迭代中立即执行。它和
setTimeout(callback, 0)类似,但在事件循环中的执行时机有所不同。 - 示例:
setImmediate(() => {
console.log('This is setImmediate');
});
14. setInterval
- 说明:按照指定的时间间隔(以毫秒为单位)重复执行回调函数,直到被
clearInterval取消。 - 示例:
setInterval(() => {
console.log('This message will appear every 3 seconds');
}, 3000);
15. setTimeout
- 说明:在指定的延迟时间(以毫秒为单位)后执行回调函数。可以使用
clearTimeout取消该操作。 - 示例:
setTimeout(() => {
console.log('This message will appear after 5 seconds');
}, 5000);
补充globalThis
globalThis 是一个在 JavaScript 中用于获取全局对象的标准方式,在不同的环境下都能提供统一的全局对象访问途径,当然也适用于 Node.js 环境。以下为你详细介绍:
出现背景
在不同的 JavaScript 运行环境中,全局对象的获取方式有所不同。例如:
- 在浏览器环境里,全局对象是
window。 - 在 Web Worker 环境中,全局对象是
self。 - 在 Node.js 环境下,全局对象是
global。
这种不一致性给跨环境开发带来了不便,而 globalThis 的出现就是为了解决这个问题,它提供了一种统一的方式来访问全局对象。
在 Node.js 中的使用
在 Node.js 里,可以使用 globalThis 来访问全局对象,其功能和 global 基本一致。
环境
Node.js 中的开发和生产没有区别,即,你无需应用任何特定设置即可使 Node.js 在生产配置中工作。但是,npm 注册表中的一些库会识别使用 NODE_ENV 变量并将其默认为 development 设置。始终在设置了 NODE_ENV=production 的情况下运行 Node.js。
process.env.NODE_ENV // 获取当前的环境变量