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

MastoJS结合NextJS API Routes(Serverless)出现TypeError求助

Next.js API Routes中使用MastoJS报错:Class extends value # is not a constructor or null

解决方案

方案1:修改Next.js Webpack配置,排除MastoJS打包

在项目根目录的next.config.js中添加以下配置,让服务器端直接使用原生的MastoJS包,避免Webpack打包破坏原生模块依赖:

/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config, { isServer }) => {
    if (isServer) {
      // 将masto排除在Webpack打包之外,直接使用Node.js原生模块
      config.externals.push('masto');
    }
    return config;
  },
};

module.exports = nextConfig;

方案2:使用动态导入

将MastoJS的导入改为动态导入,避免Webpack在构建阶段提前解析模块:

import { NextResponse } from "next/server";

export async function GET() {
  // 动态导入masto
  const { login } = await import('masto');
  const masto = await login({
    url: process.env.URL,
    accessToken: process.env.TOKEN,
  });
      
  return NextResponse.json({ 
    hello: "world"
  });  
}

方案3:升级MastoJS到最新版本

你当前使用的是MastoJS v5.11.3,该版本可能存在Serverless环境下的兼容问题。尝试升级到最新版本:

pnpm upgrade masto@latest

新版本大概率修复了这类打包兼容性问题。

原因分析

这个错误的核心是Next.js的Webpack服务器端打包机制与MastoJS的CommonJS构建版本不兼容:

  • Next.js对服务器端代码进行Webpack打包时,会对Node.js原生模块(如EventEmitter)进行特殊处理,可能改变了模块的导出结构。
  • MastoJS的CJS版本依赖原生EventEmitter的构造函数进行类继承,但Webpack打包后,EventEmitter被解析为普通对象而非构造函数,导致出现Class extends value #<Object> is not a constructor or null错误。
  • MastoJS本身完全支持Serverless环境,问题出在打包环节而非库本身的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:28