我目前正在尝试使用 Angular CLI 9.1.7 将 webworker 添加到我的 Angular 9 项目中。这个 webworker 应该使用 mathjs 7 运行一些计算。
但是,将 mathjs 导入 webworker 总是会导致浏览器控制台出现以下错误。如果我不导入 mathjs,工人运行没有问题。
index.js:7 Uncaught ReferenceError: window is not defined
at Object../node_modules/seed-random/index.js (index.js:7)
at __webpack_require__ (bootstrap:19)
at Module../node_modules/mathjs/es/function/probability/util/seededRNG.js (seededRNG.js:1)
at __webpack_require__ (bootstrap:19)
at Module../node_modules/mathjs/es/function/probability/pickRandom.js (pickRandom.js:1)
at __webpack_require__ (bootstrap:19)
at Module../node_modules/mathjs/es/factoriesAny.js (factoriesAny.js:1)
at __webpack_require__ (bootstrap:19)
at Module../node_modules/mathjs/es/entry/pureFunctionsAny.generated.js (pureFunctionsAny.generated.js:1)
at __webpack_require__ (bootstrap:19)
参考线是
var GLOBAL = typeof global === 'undefined' ? window : global;
并且是mathjs 中使用的种子随机库的一部分。我知道这window
在网络工作者中通常是未定义的,但global
据我所知应该设置。在 angular-devkit 内部使用的 webpack 配置中,我找到了以下部分:
{
plugins: [new WorkerPlugin({
globalObject: false,
plugins: [getTypescriptWorkerPlugin(wco, workerTsConfigPath)],
})],
}
在那里,我已经尝试设置globalObject
到self
或this
在我的本地node_modules
文件夹中,但这并没有解决问题。我也没有在angular.json
文件中看到为 webworker 提供任何额外配置来解决这个问题的选项,所以我不确定该怎么做才能使它工作。在mathjs 文档中,我找到了一个在 webworker 中使用它的示例,所以我认为它也应该可以使用 Angular CLI。
我用一个最小的工作示例创建了一个GitHub 存储库。如果你运行它
npm install
npm start
您可以在浏览器控制台中看到描述的错误。
所以我的问题是:如何在 Angular CLI webworker 中使用 mathjs?