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

如何在module.exports中导出多个参数?遇TypeError: add is not a function错误

解决 TypeError: add is not a function 的问题

兄弟,你的代码里有两个关键问题导致了这个错误,我给你一步步拆解并修正:

错误原因分析

1. 导出方式完全错了

你写的 module.exports = name,add(); 犯了两个致命错误:

  • 逗号运算符在这里会返回最后一个表达式的结果,也就是你调用 add() 的返回值(因为没传参数,x和y都是undefined,结果是NaN),根本没把add函数本身导出去;
  • 同时name也没被成功导出,逗号运算符直接忽略了它的值。

2. 导入方式重复且无效

Node.js的模块是单例缓存的,你两次require('./utils.js')拿到的是同一个值(也就是上面提到的NaN),所以不管你赋值给add还是name,它们都是NaN,调用add()当然会报错说它不是函数。

修正后的代码示例

方式一:导出包含多个属性的对象(推荐)

utils.js 文件:

const name = 'Mike';
const add = function(x, y) {
  return x + y;
};
// 把name和add打包成一个对象导出
module.exports = { name, add };

导入的文件:

// 一次导入,通过解构拿到需要的变量
const { add, name } = require('./utils.js');

// 测试一下
console.log(name); // 输出 'Mike'
console.log(add(2, 3)); // 输出 5

方式二:直接给module.exports添加属性

utils.js 文件:

const name = 'Mike';
const add = function(x, y) {
  return x + y;
};
// 分别给导出对象挂载属性
module.exports.name = name;
module.exports.add = add;
// 等价于更简洁的写法:exports.name = name; exports.add = add;

导入的文件和方式一完全一样,或者也可以这样写:

const utils = require('./utils.js');
const add = utils.add;
const name = utils.name;

核心注意点

  • 导出多个值时,必须把它们封装成对象(或者用ES模块的export语法,但你这里用的是CommonJS);
  • 导出函数时,要导出函数本身(比如add),而不是函数调用的结果(add());
  • 同一个模块只需要require一次,避免重复导入浪费资源,还能避免误解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:19