Ошибка при импорте математики js в Angular 9 CLI webworker - PullRequest
0 голосов
/ 26 мая 2020

Сейчас я пытаюсь добавить веб-мастера в свой проект Angular 9, используя Angular CLI 9.1.7. Этот веб-работник должен выполнить некоторые вычисления с использованием математики js 7.

Однако импорт математики js в веб-работник всегда приводит к следующей ошибке в консоли браузера. Если я не импортирую математику js, рабочий будет работать без проблем.

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;

и является частью seed- random библиотека, используемая в математике js. Я знаю, что window обычно не определено в веб-воркере, однако global должно быть установлено, насколько я понимаю. В конфигурации веб-пакета, которую angular -devkit использует внутри, я обнаружил раздел follwing :

{
  plugins: [new WorkerPlugin({
    globalObject: false,
    plugins: [getTypescriptWorkerPlugin(wco, workerTsConfigPath)],
  })],
}

Там я уже пробовал установить globalObject на self или this в моей локальной папке node_modules, однако это не решило проблему. Я также не вижу в файле angular.json возможности предоставить веб-работнику дополнительную конфигурацию для решения этой проблемы, поэтому я не уверен, что делать, чтобы эта работа работала. В документации math js я нашел пример использования его в веб-воркере, поэтому я предполагаю, что это также должно быть возможно с помощью Angular CLI.

Я создал GitHub repo с минимальным рабочим примером. Если вы запустите его с

npm install
npm start

, вы увидите описанную ошибку в консоли браузера.

Итак, мой вопрос: как я могу использовать математику js в Angular CLI веб-воркер?

1 Ответ

0 голосов
/ 01 июня 2020

Я открыл задачу по математике. js GitHub, где был предложен другой обходной путь: кажется, достаточно просто изменить импорт с

import { sqrt } from 'mathjs';

на

import { sqrt } from 'mathjs/dist/math.js';

, чтобы исправить веб-воркер.

Этот обходной путь довольно прост и, кажется, работает. Однако эта проблема может быть решена в будущих версиях math. js. Возможно, имеет смысл проверить проблему на наличие обновлений по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...