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

使用require()时整个JS文件被执行,原因是什么?

Node.js require模块时整文件代码执行的原因

这是Node.js模块加载的机制决定的:当你用require()引入一个模块时,Node会先把整个模块文件的代码从头到尾执行一遍,之后才把module.exports指向的内容返回给调用方。

你之前的误解在于,module.exports只是负责把指定的函数/对象暴露给外部,它管不了模块里哪些代码会执行。模块里所有不在函数、块级作用域内的顶级代码,在模块被第一次加载时都会自动执行——哪怕这些代码和你要导出的内容没关系。

拿你的代码举例:
当你在另一个文件里调用require('./module1.js')时,Node会先执行module1.js里的两行console.log,接着定义evening函数,最后把这个函数赋值给module.exports返回给你。所以你看到的打印结果是先输出Hello、Good Morning,再输出Good Evening。

如果只想让evening函数可以被外部调用,而其他代码不自动执行,你需要把那些不想自动运行的代码封装到函数里,比如修改module1.js:

// 把不需要自动执行的代码封装成函数
function morningGreet() {
  console.log("Hello");
  console.log("Good Morning");
}

function evening() {
  console.log("Good Evening");
}

module.exports = evening;

这样引入模块时,只会执行函数定义(不会触发打印),只有当你主动调用morningGreet()时才会执行对应的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:02:05