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

Next.js 13自定义API集成Bull队列遇No .lua files found错误求助

Next.js 13 + Bull Queue: 解决"No .lua files found!"错误

问题描述

在Next.js 13中尝试通过自定义API构建Bull队列,Redis连接正常,但队列功能报错:

Error: No .lua files found!
    at loadScripts (webpack-internal:///(rsc)/./node_modules/bull/lib/commands/index.js:29:15)
    at async eval (webpack-internal:///(rsc)/./node_modules/bull/lib/commands/index.js:18:19)
✅ Redis Connected Successfully

已尝试拆分代码到工具文件,问题仍未解决。


解决方案

方案1:改用BullMQ(推荐)

BullMQ是Bull的重写版本,对现代打包工具和Next.js兼容性更好,无lua脚本加载问题。

  1. 安装依赖:
npm install bullmq
  1. 重写队列工具文件(@/lib/queue.js):
import { Queue } from 'bullmq';
import { connectToRedis } from "@/lib/redis";

export async function createQueue() {
  const redis = await connectToRedis();
  const queue = new Queue('my-queue', { connection: redis });
  return queue;
}

export async function addJob(queue, job) {
  await queue.add('job-name', job);
}
  1. API路由文件(app/api/temp/route.js):
import { NextResponse } from "next/server";
import { createQueue, addJob } from "@/lib/queue";

export async function POST(request) {
  try {
    const queue = await createQueue();
    await addJob(queue, { name: "John", age: 30 });
    return NextResponse.json({ message: "Job added to queue successfully" }, { status: 200 });
  } catch (error) {
    console.error(error);
    return NextResponse.json({ message: "Failed to add job to queue" }, { status: 500 });
  }
}

方案2:修复Bull v4+在Next.js中的兼容性

若坚持使用Bull,需调整webpack配置并规避RSC打包限制:

  1. 修改next.config.js,添加lua文件处理规则:
/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config) => {
    config.module.rules.push({
      test: /\.lua$/,
      type: 'asset/source',
    });
    return config;
  },
};

module.exports = nextConfig;
  1. 在API路由顶部指定Node.js Runtime:
export const runtime = 'nodejs';

import { NextResponse } from "next/server";
import { createQueue, addJob } from "@/lib/queue";

// ... 后续代码不变
  1. 调整队列创建逻辑,使用Bull自带的Redis连接配置:
// @/lib/queue.js
const Queue = require('bull');

export async function createQueue() {
  const queue = new Queue('my-queue', {
    redis: {
      host: 'localhost',
      port: 6379,
      // 按需添加password等参数
    },
  });
  return queue;
}

export async function addJob(queue, job) {
  await queue.add(job);
}

原因说明

Next.js 13 App Router默认使用React Server Components(RSC),webpack打包RSC代码时会对node_modules做tree-shaking和模块转换,导致Bull依赖的lua脚本未被正确识别打包;同时传入自定义Redis客户端会干扰Bull内部的脚本路径解析逻辑,触发该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:33