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

Node.js中未赋值module.exports时,require()返回值是什么?

关于Node.js中require未导出模块的返回值问题

这个问题我之前排查模块依赖的时候也遇到过,一开始也有点困惑,后来翻了Node.js的CommonJS模块规范和源码逻辑才彻底搞清楚——标准情况下,当你require一个没有对exports或module.exports做任何赋值的文件时,返回值一定是空对象{},绝不会是undefined。

为什么默认是空对象?

Node.js在加载任何CommonJS模块时,都会自动完成以下初始化步骤:

  • 创建一个module对象,其中module.exports属性默认被初始化为空对象{}
  • 创建一个exports变量,让它指向module.exports的引用(相当于const exports = module.exports)

只要你在模块里没有修改过module.exports,也没有给exports重新赋值(注意:给exports添加属性不算修改引用,比如exports.foo = 'bar'会同步到module.exports),那么require()最终返回的就是这个默认的空对象。

举个最简单的例子:

// no-export.js
console.log('我是一个没有导出任何内容的模块');

// main.js
const mod = require('./no-export.js');
console.log(mod); // 输出: {}

那为什么会看到返回undefined的情况?

如果你确实遇到了返回undefined的场景,大概率是模块里的代码显式修改了module.exports为undefined,比如:

// bad-module.js
// 不小心把module.exports设成了undefined
module.exports = undefined;

// 或者通过逻辑赋值间接导致的
const shouldExport = false;
if (shouldExport) {
  module.exports = { foo: 'bar' };
} else {
  module.exports = undefined;
}

另外还有一种极端情况:模块加载过程中出现了未被捕获的错误,但这种情况Node.js通常会直接抛出异常,而不是返回undefined。

总结一下

  • 未修改exports/module.exports的模块,require()的标准返回值是空对象{}
  • 出现undefined一定是模块代码主动将module.exports设置为undefined导致的,不属于默认行为

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:03:21