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

仅Electron构建时web worker中出现Can't resolve crypto报错

问题复现
Module build failed (from ./node_modules/worker-plugin/dist/loader.js):
ModuleNotFoundError: Module not found: Error: Can't resolve 'crypto' in ...

该报错仅出现在Quasar 1.x + Webpack 4.44.2 环境下执行quasar dev -m electron构建、同时使用worker-plugin的场景,主浏览器线程运行、普通Web应用使用worker-plugin构建均无异常。

根因

Webpack 4 处理worker-plugin生成的Web Worker线程代码时采用独立编译规则,不会主动继承主渲染线程的模块解析配置。Quasar 1.x的Electron构建默认给主渲染线程配置了Node内置模块的访问/Polyfill规则,但该配置未同步到Worker的编译流程中,识别到代码中的crypto引用时无法匹配到对应模块。

解决方案

场景1:代码使用浏览器原生Crypto API(推荐)

如果你的业务代码仅调用浏览器标准crypto全局对象(如crypto.subtle系列接口),无需依赖Node版本crypto模块,无需安装额外依赖,直接修改配置即可:

  1. 打开项目根目录quasar.conf.js,定位到build.extendWebpack配置项,更新为以下内容:
build: {
  extendWebpack (cfg) {
    // 将crypto引用直接指向Worker/主线程通用的全局原生对象
    cfg.resolve.alias.crypto = 'self.crypto'
    // 给worker-plugin注入全局解析规则
    cfg.module.rules.forEach(rule => {
      if (rule.loader === 'worker-plugin/dist/loader.js') {
        rule.options = rule.options || {}
        rule.options.resolve = cfg.resolve
      }
    })
    // 兼容Webpack4的node模块解析开关
    cfg.node = cfg.node || {}
    cfg.node.crypto = true
  }
}

场景2:代码依赖Node crypto模块专属API

如果业务代码用到了Node crypto模块的特有功能,需要手动安装对应Polyfill:

  1. 先安装依赖包:
    npm install crypto-browserify stream-browserify buffer --save-dev
  2. 修改quasar.conf.js的build配置:
build: {
  extendWebpack (cfg) {
    // 配置Node内置模块别名到对应Polyfill
    cfg.resolve.alias = {
      ...cfg.resolve.alias,
      'crypto': require.resolve('crypto-browserify'),
      'stream': require.resolve('stream-browserify'),
      'buffer': require.resolve('buffer')
    }
    // 同步解析规则到worker-plugin
    cfg.module.rules.forEach(rule => {
      if (rule.loader && rule.loader.includes('worker-plugin/dist/loader.js')) {
        rule.options = rule.options || {}
        rule.options.resolve = cfg.resolve
        rule.options.node = {
          crypto: true,
          stream: true,
          buffer: true
        }
      }
    })
    // 全局开启对应Node模块支持
    cfg.node = {
      ...cfg.node,
      crypto: true,
      stream: true,
      buffer: true
    }
  }
}
验证

修改配置后重新执行quasar dev -m electron即可正常完成构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:57:03