Node.js 全局变量完整总结
1. 真正的全局变量(在任何模块都可访问)
__dirname
- 含义:当前模块的目录名
- 示例 :
/Users/project/src
javascript
console.log(__dirname); // 输出当前文件所在目录的绝对路径
__filename
- 含义:当前模块的文件名(绝对路径)
- 示例 :
/Users/project/src/app.js
javascript
console.log(__filename); // 输出当前文件的绝对路径
exports
- 含义:模块导出对象的引用
- 注意 :在模块中
exports
是module.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.exports
与 exports
的关系
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. 注意事项
- ES 模块中的
__dirname
:
javascript
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
- 全局变量污染 :避免在
global
对象上添加属性 - 环境差异 :某些全局变量在浏览器中不存在(如
__dirname
)
这个总结涵盖了 Node.js 中所有重要的全局变量,在实际开发中会经常用到这些变量。