首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Angular 9 CLI webworker中导入mathjs时出错

在Angular 9 CLI webworker中导入mathjs时出错
EN

Stack Overflow用户
提问于 2020-05-26 23:31:41
回答 1查看 241关注 0票数 1

我目前正在尝试使用Angular CLI 9.1.7在我的Angular 9项目中添加一个webworker。这个webworker应该使用mathjs 7运行一些计算。

但是,将mathjs导入到webworker中总是会在浏览器控制台中导致以下错误。如果我不导入mathjs,worker运行起来就没有问题。

代码语言:javascript
运行
复制
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)

引用的行为

代码语言:javascript
运行
复制
var GLOBAL = typeof global === 'undefined' ? window : global;

并且是mathjs中使用的seed-random库的一部分。我知道在webworker中window通常是未定义的,但据我所知,应该设置global。在angular-devkit内部使用的webpack配置中,我找到了follwing section

代码语言:javascript
运行
复制
{
  plugins: [new WorkerPlugin({
    globalObject: false,
    plugins: [getTypescriptWorkerPlugin(wco, workerTsConfigPath)],
  })],
}

在那里,我已经尝试在我本地的node_modules文件夹中将globalObject设置为selfthis,但是这并没有解决问题。我也没有在angular.json文件中看到一个选项来为webworker提供任何额外的配置来解决这个问题,所以我不确定该怎么做才能使这个问题生效。在mathjs documentation中,我发现了一个在webworker中使用它的示例,所以我认为使用Angular CLI也是可能的。

我用一个最小的工作示例创建了一个GitHub repo。如果使用以下命令运行它

代码语言:javascript
运行
复制
npm install
npm start

您可以在浏览器控制台中看到描述的错误。

所以我的问题是:如何在Angular CLI webworker中使用mathjs?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 02:07:54

我在math.js GitHub上打开了一个issue,其中提出了另一个解决方法:似乎只需将导入从

代码语言:javascript
运行
复制
import { sqrt } from 'mathjs';

代码语言:javascript
运行
复制
import { sqrt } from 'mathjs/dist/math.js';

来修复webworker。

这个变通方法相当简单,而且似乎是有效的。但是,此问题可能会在未来版本的math.js中得到解决。检查这个问题的更新可能是有意义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62025792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档