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

在React+Webpack项目的Web Worker中导入fabric.js报错如何解决?

错误根因

该报错是因为 fabric 默认引入的构建版本依赖 jsdom 模拟 DOM 环境,而 Web Worker 运行上下文不存在原生 DOM 节点,同时 fabric 加载的 jsdom 实例类型不符合预期导致报错。

需添加的Webpack配置

修改你的webpack配置文件,新增如下配置项即可:

module.exports = {
  // 原有其他配置保持不变
  resolve: {
    alias: {
      // 指定fabric加载无DOM依赖的node端构建版本
      'fabric': 'fabric/dist/fabric.node.js'
    }
  },
  externals: {
    // 告诉webpack不需要打包jsdom模块,运行时直接忽略该依赖
    'jsdom': 'commonjs jsdom'
  },
  node: {
    // 补充node全局变量模拟,避免fabric找不到环境变量报错
    __dirname: false,
    __filename: false,
    global: true
  },
  module: {
    rules: [
      // 如果你使用worker-loader处理worker文件,对应规则补充如下配置
      {
        test: /\.worker\.js$/,
        use: [
          {
            loader: 'worker-loader',
            options: {
              worker: {
                type: 'Worker',
                options: {
                  type: 'classic'
                }
              }
            }
          }
        ]
      }
    ]
  }
}

Worker代码的必要修改

fabric的node构建版本初始化StaticCanvas不需要传入DOM选择器,将你Worker中实例化canvas的代码修改为如下即可:

const canvas = new fabric.StaticCanvas(null, {
  width:1024,
  height: 1024,
  selection: false,
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:18:04