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脚本加载问题。
- 安装依赖:
npm install bullmq
- 重写队列工具文件(
@/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); }
- 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打包限制:
- 修改
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;
- 在API路由顶部指定Node.js Runtime:
export const runtime = 'nodejs'; import { NextResponse } from "next/server"; import { createQueue, addJob } from "@/lib/queue"; // ... 后续代码不变
- 调整队列创建逻辑,使用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
相关产品推荐
相关产品推荐

