NodeJs第八章(环境与全局变量)

331 阅读4分钟

在 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 // 获取当前的环境变量