You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中多次require模块仅输出一次hi,如何实现三次输出?

解决多次require同一模块只执行一次的问题

嘿,这个问题其实是Node.js模块系统的缓存机制在搞鬼!

Node.js为了提升性能,会对已经加载过的模块做缓存处理:当你第一次require('./log.js')时,Node会执行该模块的代码,然后把模块的导出结果存在require.cache里;之后再require同一个路径的模块时,直接返回缓存里的结果,不会重新执行模块代码——这就是为什么你只看到一次'hi'输出。

要实现三次输出,这里有两种常用方案,推荐第一种:

方法一:将逻辑封装为可调用的函数(推荐)

修改你的log.js,把输出逻辑封装成函数并导出,这样每次调用函数就能触发一次输出:

// log.js
module.exports = function sayHi() {
  console.log('hi');
};

然后在主文件里调用这个函数三次:

// 主文件
const sayHi = require('./log.js');
sayHi(); // 输出'hi'
sayHi(); // 输出'hi'
sayHi(); // 输出'hi'

这种方式完全符合Node.js模块的设计理念,模块导出可复用的功能,而不是只执行一次的一次性代码。

方法二:绕过模块缓存(不推荐,仅作了解)

如果你实在不想修改log.js的结构,可以通过删除require.cache里的缓存项,强制Node重新加载模块。不过这种方法不推荐,因为缓存是Node优化性能的核心机制之一,频繁清除缓存可能引发意外的状态问题,还会降低程序运行效率。

实现代码如下:

// 主文件
function requireWithoutCache(modulePath) {
  // 获取模块的绝对路径,避免相对路径的缓存键冲突
  const resolvedPath = require.resolve(modulePath);
  // 删除对应模块的缓存
  delete require.cache[resolvedPath];
  // 重新加载模块
  return require(modulePath);
}

// 三次调用,每次都重新执行模块代码
requireWithoutCache('./log.js');
requireWithoutCache('./log.js');
requireWithoutCache('./log.js');

内容的提问来源于stack exchange,提问作者ThomasReggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:51:27