首页 > 解决方案 > 使用导入的函数会导致网络工作者崩溃

问题描述

我有一个运行 angular 8+ 的电子应用程序。我正在调用从node_modules. 如果我直接在我的组件中调用这个函数,它工作正常。如果我尝试在 Web Worker 中调用相同的函数,则构建失败。

// component file
const worker = new Worker('./dead-link-checker.worker', { type: 'module' });
        worker.onmessage = ({ data }) => {
            console.log(`page got message: ${data}`);
        };
        worker.postMessage({
            domainName: this.domainName,
            links: this.linksService.links
        });

// webworker file
import { deadLinkChecker } from 'dead-link-checker';
import { tester } from './test';

addEventListener('message', async ({ data }) => {
  console.log('in the workerer', data);

  // Breaks everything
  await deadLinkChecker(data.domainName, undefined, data.links);

  // Works fine
  tester();
  postMessage('link checking complete', undefined);
});

错误:

ERROR in ./src/app/dead-link-checker.worker.ts (./node_modules/worker-plugin/dist/loader.js!./src/app/dead-link-checker.worker.ts)
Module build failed (from ./node_modules/worker-plugin/dist/loader.js):
ModuleNotFoundError: Module not found: Error: Can't resolve 'crypto' in 'C:\js_scripts\jordan-does-link-checking-electron\node_modules\aws-sign2'
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\webpack\lib\Compilation.js:823:10
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\webpack\lib\NormalModuleFactory.js:397:22
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\webpack\lib\NormalModuleFactory.js:130:21
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\webpack\lib\NormalModuleFactory.js:224:22
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\neo-async\async.js:2830:7
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\neo-async\async.js:6877:13
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\webpack\lib\NormalModuleFactory.js:214:25
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\Resolver.js:184:12
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\Resolver.js:238:5
    at eval (eval at create (C:\js_scripts\jordan-does-link-checking-electron\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:15:1)
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\UnsafeCachePlugin.js:37:5
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\Resolver.js:238:5
    at eval (eval at create (C:\js_scripts\jordan-does-link-checking-electron\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:15:1)
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\Resolver.js:238:5
    at eval (eval at create (C:\js_scripts\jordan-does-link-checking-electron\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:27:1)
    at C:\js_scripts\jordan-does-link-checking-electron\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:42:38

在以角度使用nodejs脚本之前,我遇到过这种错误,我已经使用这样解决方案来解决它。这似乎不是同一个问题,因为deadLinkChecker如果我在 Web Worker 之外使用导入的函数,它可以正常工作。

标签: angulartypescriptelectronweb-worker

解决方案


推荐阅读