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

相关推荐
Yeats_Liao4 分钟前
Go Web 编程快速入门 · 04 - 请求对象 Request:头、体与查询参数
前端·golang·iphone
祈祷苍天赐我java之术18 分钟前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
草莓熊Lotso1 小时前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
Olrookie1 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
533_2 小时前
[vue] dayjs 显示实时时间
前端·javascript·vue.js
故事与他6452 小时前
XSS_and_Mysql_file靶场攻略
前端·学习方法·xss
莫的感情3 小时前
下载按钮点击一次却下载两个文件问题
前端
一个很帅的帅哥3 小时前
JavaScript事件循环
开发语言·前端·javascript
小宁爱Python3 小时前
Django Web 开发系列(二):视图进阶、快捷函数与请求响应处理
前端·django·sqlite
fox_3 小时前
深入理解React中的不可变性:原理、价值与实践
前端·react.js