我目前正在尝试使用Angular CLI 9.1.7在我的Angular 9项目中添加一个webworker。这个webworker应该使用mathjs 7运行一些计算。
但是,将mathjs导入到webworker中总是会在浏览器控制台中导致以下错误。如果我不导入mathjs,worker运行起来就没有问题。
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中使用的seed-random库的一部分。我知道在webworker中window
通常是未定义的,但据我所知,应该设置global
。在angular-devkit内部使用的webpack配置中,我找到了follwing section:
{
plugins: [new WorkerPlugin({
globalObject: false,
plugins: [getTypescriptWorkerPlugin(wco, workerTsConfigPath)],
})],
}
在那里,我已经尝试在我本地的node_modules
文件夹中将globalObject
设置为self
或this
,但是这并没有解决问题。我也没有在angular.json
文件中看到一个选项来为webworker提供任何额外的配置来解决这个问题,所以我不确定该怎么做才能使这个问题生效。在mathjs documentation中,我发现了一个在webworker中使用它的示例,所以我认为使用Angular CLI也是可能的。
我用一个最小的工作示例创建了一个GitHub repo。如果使用以下命令运行它
npm install
npm start
您可以在浏览器控制台中看到描述的错误。
所以我的问题是:如何在Angular CLI webworker中使用mathjs?
发布于 2020-06-02 02:07:54
我在math.js GitHub上打开了一个issue,其中提出了另一个解决方法:似乎只需将导入从
import { sqrt } from 'mathjs';
至
import { sqrt } from 'mathjs/dist/math.js';
来修复webworker。
这个变通方法相当简单,而且似乎是有效的。但是,此问题可能会在未来版本的math.js中得到解决。检查这个问题的更新可能是有意义的。
https://stackoverflow.com/questions/62025792
复制相似问题