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

NestJS+Webpack环境下Bull.js无法获取导出函数的问题

解决NestJS+Webpack编译Bull Worker时的导出兼容问题

问题场景

我的NestJS应用中有如下TypeScript Worker代码:

async function bootstrap(job: Job, done: DoneCallback) {
  //...
}
export default bootstrap;

编译为JS文件后,导出语句为exports["default"] = bootstrap;,但Bull.js抛出错误:

/usr/src/app/node_modules/bull/lib/job.js:516
          reject(new Error(failedReason));
                 ^
Error: origProcessor.apply is not a function

手动在编译后的JS文件中添加module.exports = bootstrap;后即可正常运行,现需通过Webpack配置解决该问题,且保留Webpack作为编译工具。

环境信息

  • bull版本:4.10.4
  • webpack版本:5.76.3
  • nestjs版本:9.3.12

解决方案

方法1:调整Webpack Output配置

修改Webpack配置文件,在output字段中添加libraryTarget和libraryExport,让Webpack将默认导出直接映射到module.exports:

const path = require('path');

module.exports = {
  // 其他已有配置
  target: 'node', // 必须指定为node环境,避免Webpack注入浏览器相关代码
  output: {
    filename: 'worker.js', // 你的Worker输出文件名
    path: path.resolve(__dirname, 'dist'), // 输出目录
    libraryTarget: 'commonjs',
    libraryExport: 'default',
  },
};

该配置会让Webpack编译后生成module.exports = bootstrap;的导出语句,完全适配Bull.js对CommonJS模块的读取逻辑。

方法2:修改TypeScript导出语法

若不想调整Webpack配置,可直接修改Worker代码的导出方式,使用TypeScript的export =语法替代默认导出:

async function bootstrap(job: Job, done: DoneCallback) {
  //...
}
export = bootstrap;

TypeScript编译器会直接将该语法编译为module.exports = bootstrap;,无需额外Webpack配置。

方法3:适配NestJS CLI的Webpack配置

如果项目使用@nestjs/cli管理,可通过自定义Webpack配置文件修改输出规则:

  1. 在项目根目录创建webpack.config.js:
module.exports = function (config) {
  config.output
    .libraryTarget('commonjs')
    .libraryExport('default');
  return config;
};
  1. 在nest-cli.json中指定该配置文件:
{
  "compilerOptions": {
    "webpackConfig": "webpack.config.js"
  }
}

内容的提问来源于stack exchange,提问作者Nícolas Amarante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:23