全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 7 分钟 ✍️ juanwangdev

Node.js require 模块加载函数

require 是 Node.js 的全局函数,用于加载和导入模块。

基本用法

JavaScript
// 加载核心模块
const fs = require('fs');
const path = require('path');
const http = require('http');

// 加载第三方模块
const express = require('express');
const lodash = require('lodash');

// 加载本地模块
const utils = require('./utils');
const config = require('../config');

模块加载规则

核心模块

JavaScript
// 直接使用模块名
const fs = require('fs');
const crypto = require('crypto');
const events = require('events');

文件模块

JavaScript
// 相对路径
const mod = require('./module');
const parent = require('../parent');

// 绝对路径
const config = require('/home/user/config');

// 可省略扩展名
const utils = require('./utils'); // 自动尝试 .js, .json, .node

目录模块

JavaScript
// 加载目录下的 index.js
const routes = require('./routes');

// 等同于
const routes = require('./routes/index');

node_modules 查找

JavaScript
// 从当前目录向上查找 node_modules
const lodash = require('lodash');
// 查找顺序: ./node_modules -> ../node_modules -> ../../node_modules

require.resolve

JavaScript
// 解析模块的完整路径,不加载模块
const modulePath = require.resolve('lodash');
console.log(modulePath);
// /home/user/project/node_modules/lodash/lodash.js

const localPath = require.resolve('./utils');
console.log(localPath);

require.cache

JavaScript
// 查看模块缓存
console.log(require.cache);

// 删除缓存(重新加载模块)
delete require.cache[require.resolve('./config')];
const config = require('./config'); // 重新加载

模块缓存机制

JavaScript
// config.js
let count = 0;
module.exports = {
  getCount: () => count,
  increment: () => ++count
};

// app.js
const config1 = require('./config');
config1.increment(); // count = 1

const config2 = require('./config');
console.log(config2.getCount()); // 1(同一实例)

// require 返回缓存的模块实例
console.log(config1 === config2); // true

循环依赖

JavaScript
// a.js
const b = require('./b');
exports.name = 'a';

// b.js
const a = require('./b');
exports.name = 'b';
// Node.js 会返回 a.js 的未完成副本

Node.js 通过返回未完成副本处理循环依赖,应尽量避免循环引用。

条件加载

JavaScript
// 根据环境加载不同配置
const config = require(process.env.NODE_ENV === 'production'
  ? './config.prod'
  : './config.dev');

要点总结

  • require 加载核心模块、文件模块、第三方模块
  • 相对路径以 ./ 或 ../ 开头,绝对路径以 / 开头
  • require 返回缓存实例,重复 require 不会重新加载
  • require.resolve 解析路径但不加载模块
  • 避免循环依赖,会导致不可预期的行为

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js process 进程对象
下一篇 → Node.js setInterval 间隔定时器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库