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

Node.js中module.exports不符合预期:导出模块代码被全部执行

为什么Node.js模块里非导出函数的代码也会被执行?

这其实是Node.js模块加载机制的正常行为哦~当你用require()引入一个模块时,Node.js会完整执行整个模块文件里的所有代码,之后才把module.exports指向的内容返回给调用方,而不是只执行导出函数内部的代码。

结合你的代码来看:

  • 当test2.js里执行var test = require("./test")时,Node.js会先去运行test.js的全部代码:
    1. 首先执行顶层的console.log("Hello2"),所以先输出了Hello2;
    2. 然后把你定义的函数赋值给module.exports,这个函数才被返回给test2.js里的test变量;
  • 之后你调用test(),才会执行函数内部的console.log("Hello"),输出Hello。

所以最终的输出顺序就是Hello2 Hello啦。

如果你想让Hello2只在调用导出函数时才执行,只需要把它移到函数内部就行:

// file: test.js
module.exports = function () {
 console.log("Hello");
 console.log("Hello2"); // 现在只有调用test()时才会执行这行
}

另外,如果有些代码你只想在直接运行该模块文件(比如node test.js)时执行,而被其他文件require时不执行,可以用require.main === module来判断:

// file: test.js
module.exports = function () {
 console.log("Hello");
}

// 只有直接运行node test.js时才会执行这部分
if (require.main === module) {
  console.log("Hello2");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:36