我正在使用openpgp.js库编写一个加密消息传递器,并从主线程上卸载加密操作,我必须使用内置的Web Worker。
要使用它,我必须在代码中指定工作者的文件名。
await openpgp.initWorker({ path: 'openpgp.worker.js' });
但是当我用ng build
构建我的Angular应用程序时,它将输出一个包含所有应用程序代码的main.js
文件,并指定此文件名将不方便。
由于使用了Angular框架,我相应地使用了TypeScript,并且要导入openpgp.js,我使用了类型定义库@types/openpgp
内置Web Worker的文件位于:https://github.com/openpgpjs/openpgpjs/blob/master/src/worker/worker.js
需要捆绑,以便与工作人员捆绑,和openpgp库本身的文件(由于[C0])应作为单独的文件输出并由应用程序代码使用。
这是我使用的代码:
worker requests openpgp.js
file
要解决此问题,我将openpgp.js
和import { Injectable, OnDestroy } from '@angular/core';
import { initWorker, ..., destroyWorker } from 'openpgp';
@Injectable({
providedIn: 'root'
})
export class CrypterService implements OnDestroy {
constructor() {
initWorker({ path: 'openpgp.worker.js' });
}
generateKeys() { ... }
encrypt(...) {...}
decrypt(...) {...}
ngOnDestroy() {
destroyWorker();
}
}
文件放入openpgp.js
目录并按如下方式配置openpgp.worker.js
:
/public
我也在寻找解决方案。您找到我的使用方式了吗?