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

相关推荐
Kapaseker2 分钟前
前端已死...了吗
android·前端·javascript
m0_471199636 分钟前
【自动化】前端开发,如何将 Jenkins 与 Gitee 结合实现自动化的持续集成(构建)和持续部署(发布)
前端·gitee·自动化·jenkins
w***95497 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
Moment11 分钟前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq16 分钟前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
晓得迷路了17 分钟前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫20 分钟前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++20 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
鹏多多26 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
小Tomkk35 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg