JS模块可导出类但无法导出函数,调用时报TypeError求助
问题原因分析
你遇到的TypeError: chain.getSwapChainContractInstance is not a function错误,核心原因是CommonJS模块导出机制的覆盖问题:
在你的模块代码末尾,你直接赋值了module.exports = { SwapToken, SwapChainV2 },这会完全替换掉模块原本的导出对象——之前通过exports.getSwapChainContractInstance和exports.getSwapValueContractInstance添加的函数,会被这个新的赋值覆盖,外部导入时自然找不到这些函数。
解决方案
有两种修复方式,任选其一即可:
方式一:将函数合并到最终导出对象
修改模块末尾的导出代码,把两个工具函数和类一起放入module.exports对象:
// 替换原来的module.exports行 module.exports = { SwapToken, SwapChainV2, getSwapChainContractInstance, getSwapValueContractInstance }
方式二:基于exports对象添加所有导出项
不要直接赋值module.exports,而是通过exports对象逐个添加类和函数:
// 移除原来的module.exports = { SwapToken, SwapChainV2 } // 改为直接添加到exports exports.SwapToken = SwapToken; exports.SwapChainV2 = SwapChainV2; // 保留原来的函数导出 exports.getSwapChainContractInstance = function() { /* ... */ } exports.getSwapValueContractInstance = function() { /* ... */ }
验证修改后的导入使用
修改后,你原来的导入方式可以正常访问所有导出内容:
const chain = require('../models/chain/chain'); // 可以调用函数 const swapChainInstance = chain.getSwapChainContractInstance(); // 也可以使用类 const { SwapToken, SwapChainV2 } = require('../models/chain/chain');
内容的提问来源于stack exchange,提问作者Gleichmut
相关产品推荐
相关产品推荐

