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 中所有重要的全局变量,在实际开发中会经常用到这些变量。

相关推荐
ttyyttemo2 小时前
Learn-Jetpack-Compose-By-Example---TextFieldValue
前端
_AaronWong2 小时前
多页面应用登录状态共享:基于弹出窗口的通用解决方案
前端·javascript·vue.js
六月的可乐2 小时前
Vue接入AI聊天助手实战
前端·vue.js·人工智能
degree5202 小时前
Webpack 与 Vite 构建速度对比:冷启动、HMR、打包性能实测分析
前端
猩猩程序员2 小时前
下一版本 MCP 协议将于2025年11月25日发布
前端
熊猫_豆豆2 小时前
用MATLAB画一只可爱的小熊
前端·matlab·画图
凯哥19702 小时前
Vue 3 + Supabase 认证与授权时序最佳实践指南
前端·后端
GHOME2 小时前
MCP-学习(1)
前端·后端·mcp
数字化顾问2 小时前
解析前端框架 Axios 的设计理念与源码:从零手写一个支持 HTTP/3 的“类 Axios”最小核
前端