如何在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
相关产品推荐
相关产品推荐

