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

Node.js中重复require同一脚本是否会导致其重复执行的技术咨询

关于Node.js中重复require同一模块的执行次数问题

好问题!我来帮你明确这个Node.js模块加载的核心逻辑,直接给你结论+原理+验证方法:

核心结论

不会导致脚本3执行两次,你的担忧是多余的,Node.js的模块缓存机制会帮你避免这个问题。

原理详解

Node.js在处理require()调用时,有一套内置的模块缓存机制:

  • 当你第一次require('./script3.js')(脚本1里的调用),Node.js会完整执行脚本3里的所有代码,然后把模块导出的内容(也就是你的余额数组)缓存到内存中。
  • 之后不管是脚本2还是其他任何脚本再调用require('./script3.js'),Node.js都不会重新执行脚本3的代码,而是直接返回之前缓存的导出对象引用。

对应你的场景来说:

  • 脚本3里的定时执行函数只会在第一次被require时启动一次,后续所有require调用都只是拿到同一个余额数组的引用,不会再次触发定时任务,也不会重复执行脚本3里的初始化逻辑。

验证方法(快速确认)

你可以在脚本3里加个唯一的初始化日志,比如:

// script3.js
console.log('脚本3初始化完成,定时任务启动');
let balanceArray = [];

setInterval(() => {
  // 模拟更新余额逻辑
  balanceArray = [/* 从API获取的最新数据 */];
}, 3000);

module.exports = balanceArray;

然后同时启动脚本1和脚本2,你会发现控制台只会输出一次脚本3初始化完成,定时任务启动,定时任务也只会以3秒间隔运行一次——这就证明脚本3只被执行了一次。

注意事项

  • 确保两个脚本里require的路径完全一致:比如脚本1和脚本2都用require('./script3.js')(相对路径相同),如果一个用相对路径一个用绝对路径,或者路径拼写有差异,Node.js会认为是不同模块,可能导致重复执行。
  • 脚本3里的所有顶层代码(不是导出部分的代码)只会执行一次,包括你初始化定时任务的逻辑,所以完全符合你减少API调用的初衷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:55