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

使用require导出Class时出现错误的问题排查

Node.js模块导出错误导致类继承失败的解决方法

问题概述

我在项目中尝试导出ReplitDB类,让MoodDB类继承它,但试了两种导出方式都报错,排查许久仍未解决,希望明确问题根源。

错误代码与对应报错

方式A(ReplitDB.js)

...
exports.module = ReplitDB;

触发报错:

TypeError: Class extends value #<Object> is not a constructor or null
    at Object.<anonymous> (/home/runner/Class-Extends-Error/libs/MoodDB.js:7:22)
    at Module._compile (node:internal/modules/cjs/loader:1159:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
    at Module.load (node:internal/modules/cjs/loader:1037:32)
    at Module._load (node:internal/modules/cjs/loader:878:12)
    at Module.require (node:internal/modules/cjs/loader:1061:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/home/runner/Class-Extends-Error/index.js:12:16)
    at Module._compile (node:internal/modules/cjs/loader:1159:14)

方式B(ReplitDB.js)

modules.export = ReplitDB ;

触发报错:

ReferenceError: modules is not defined
    at Object.<anonymous> (/home/runner/Class-Extends-Error/libs/ReplitDB.js:110:1)
    at Module._compile (node:internal/modules/cjs/loader:1159:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
    at Module.load (node:internal/modules/cjs/loader:1037:32)
    at Module._load (node:internal/modules/cjs/loader:878:12)
    at Module.require (node:internal/modules/cjs/loader:1061:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/home/runner/Class-Extends-Error/libs/MoodDB.js:23:18)
    at Module._compile (node:internal/modules/cjs/loader:1159:14)

继承逻辑代码(MoodDB.js)

const ReplitDB = require('./ReplitDB.js')

class MoodDB extends ReplitDB {
    constructor(){
        super()
    }
    
    ...
}

问题根源

两种导出方式均违反Node.js CommonJS模块的语法规则:

  1. 方式A:语法顺序错误,exports.module 应为 module.exports。错误写法导致导出的是包含module属性的普通对象,而非ReplitDB类本身,因此继承时会提示“不是构造函数”。
  2. 方式B:拼写错误,modules.export 应为 module.exports(单数module,复数exports),因此触发“modules未定义”的引用错误。

解决方法

修改ReplitDB.js的导出代码为正确的CommonJS语法:

// 正确导出类
module.exports = ReplitDB;

修改后,require('./ReplitDB.js')将直接获取ReplitDB类,MoodDB继承时即可正常调用构造函数。

若项目使用ES模块规范(需在package.json中配置"type": "module"),也可使用以下写法:

// ReplitDB.js 中导出
export default ReplitDB;

// MoodDB.js 中导入
import ReplitDB from './ReplitDB.js';

内容的提问来源于stack exchange,提问作者The Jaded George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:16