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

Node.js中如何在另一文件调用不同导出语法的函数?修复调用报错

问题解决:保留原有导出同时暴露fun函数

问题根源

你在main.js里两次赋值module.exports,第二次的module.exports = {fun}直接覆盖了第一次导出的函数,这就导致call.js里要么只能拿到新对象,要么丢失原有导出逻辑。而你要求保留第一次的导出不能修改,所以不能用覆盖的方式。

解决方案

JS里函数是一等对象,可以直接给第一次导出的函数添加属性,把fun挂载到上面,而非重新赋值module.exports:

修改后的main.js代码

// 原有不可修改的导出,保持原样
module.exports = function(controller) {
  // some code
};

// 你的fun函数定义
function fun() {
  // 函数逻辑
  console.log('fun运行正常');
}

// 把fun挂载到导出的函数对象上
module.exports.fun = fun;

call.js里的调用方式

const main = require('./main');

// 调用fun函数
main.fun();

// 如果需要调用原来的controller函数,直接调用main即可
// main(yourController);

原理说明

module.exports本质是一个对象,当你第一次赋值为函数后,这个函数本身也是一个对象,允许添加自定义属性。这样既保留了原有导出的controller函数,又能通过同一个require返回的对象访问到fun,不会出现覆盖导致的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:40:33