Node.js 全局变量完整总结

Node.js 全局变量完整总结

1. 真正的全局变量(在任何模块都可访问)

__dirname

  • 含义:当前模块的目录名
  • 示例/Users/project/src
javascript 复制代码
console.log(__dirname); // 输出当前文件所在目录的绝对路径

__filename

  • 含义:当前模块的文件名(绝对路径)
  • 示例/Users/project/src/app.js
javascript 复制代码
console.log(__filename); // 输出当前文件的绝对路径

exports

  • 含义:模块导出对象的引用
  • 注意 :在模块中 exportsmodule.exports 的简写
javascript 复制代码
exports.hello = function() { return 'Hello'; };

module

  • 含义:当前模块的引用
  • 用途:定义模块导出
javascript 复制代码
module.exports = MyClass;

require()

  • 含义:用于导入模块的函数
  • 用法require(id)
javascript 复制代码
const fs = require('fs');
const myModule = require('./my-module');

process

  • 含义:当前 Node.js 进程的信息和控制
  • 重要属性/方法
javascript 复制代码
// 环境变量
console.log(process.env);

// 命令行参数
console.log(process.argv);

// 当前工作目录
console.log(process.cwd());

// 平台信息
console.log(process.platform);

// 内存使用情况
console.log(process.memoryUsage());

Buffer

  • 含义:用于处理二进制数据的类
  • 示例
javascript 复制代码
const buf = Buffer.from('hello', 'utf8');
console.log(buf.toString()); // hello

console

  • 含义:用于标准输出的控制台对象
  • 方法
javascript 复制代码
console.log('信息');
console.error('错误');
console.warn('警告');
console.table({a: 1, b: 2});

setTimeout / setInterval / setImmediate

  • 含义:定时器函数
javascript 复制代码
setTimeout(() => console.log('延时执行'), 1000);
setInterval(() => console.log('间隔执行'), 2000);
setImmediate(() => console.log('立即执行'));

clearTimeout / clearInterval / clearImmediate

  • 含义:清除定时器
javascript 复制代码
const timer = setTimeout(() => {}, 1000);
clearTimeout(timer);

2. 全局对象下的属性(global.xxx

global

  • 含义:全局命名空间对象
  • 注意:在 Node.js 中,顶层作用域不是全局作用域
javascript 复制代码
// 在浏览器中:var x = 1; // 全局变量
// 在 Node.js 中:var x = 1; // 只是当前模块的变量
global.x = 1; // 这才是真正的全局变量

global.process

  • 含义 :同 process

global.console

  • 含义 :同 console

global.Buffer

  • 含义 :同 Buffer

global.setTimeout 等定时器

  • 含义:同相应的定时器函数

3. ES 模块相关的全局变量

TextEncoder / TextDecoder

  • 含义:用于 UTF-8 编码转换
javascript 复制代码
const encoder = new TextEncoder();
const decoder = new TextDecoder();

URL / URLSearchParams

  • 含义:用于 URL 处理
javascript 复制代码
const url = new URL('https://example.com/path');
const params = new URLSearchParams('a=1&b=2');

fetch (Node.js 18+)

  • 含义:用于 HTTP 请求
javascript 复制代码
const response = await fetch('https://api.example.com');
const data = await response.json();

4. 常用但非真正全局的变量

module.exportsexports 的关系

javascript 复制代码
// 以下两种方式等价:
module.exports = { a: 1 };

// 或者
exports.a = 1;

// 但这样是错误的:
exports = { a: 1 }; // 不会生效

5. 环境相关的全局变量

process.env

  • 含义:包含用户环境的对象
  • 常用:用于配置管理
javascript 复制代码
// 读取环境变量
const dbUrl = process.env.DATABASE_URL;
const port = process.env.PORT || 3000;

// 设置环境变量(仅在当前进程有效)
process.env.NODE_ENV = 'production';

6. 实用示例

webpack.config.js 中的典型使用

javascript 复制代码
const path = require('path');

module.exports = {
  entry: path.resolve(__dirname, 'src/index.js'),
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.[hash].js'
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    })
  ]
};

进程信息监控

javascript 复制代码
// 监控内存使用
setInterval(() => {
  const usage = process.memoryUsage();
  console.log(`内存使用: ${Math.round(usage.heapUsed / 1024 / 1024)}MB`);
}, 5000);

// 处理进程退出
process.on('exit', (code) => {
  console.log(`进程退出,代码: ${code}`);
});

// 处理未捕获异常
process.on('uncaughtException', (err) => {
  console.error('未捕获异常:', err);
  process.exit(1);
});

7. 注意事项

  1. ES 模块中的 __dirname
javascript 复制代码
import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
  1. 全局变量污染 :避免在 global 对象上添加属性
  2. 环境差异 :某些全局变量在浏览器中不存在(如 __dirname

这个总结涵盖了 Node.js 中所有重要的全局变量,在实际开发中会经常用到这些变量。

相关推荐
恋猫de小郭23 分钟前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端