我有一个电子应用,其运行角度为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
在angular中使用nodejs脚本之前,我曾遇到过此类错误,并且我使用过this之类的解决方案来解决它。这似乎不是一个相同的问题,因为如果在Web worker之外使用导入的deadLinkChecker
函数,效果很好。