Как я могу запустить CodeMirror "runMode" в Web Worker, не имея документа не определен? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть (машинописный) компилятор, работающий в Web Worker, и он мне нужен, чтобы проанализировать источник для литеральных значений в сценарии. Я использовал CodeMirror.runMode для этого, и он работает нормально, но загрузка CodeMirror внутри Web Worker приводит к ошибкам.

Uncaught ReferenceError: document is not defined

Как я могу загрузить CodeMirror для разбора кода в Web Worker?

1 Ответ

0 голосов
/ 26 февраля 2020

Вот рабочее решение:

В CodeMirror есть скрипт "runmode-standalone", который делает именно то, что мне нужно. Это работает, но я должен был сделать некоторые исправления для некоторых файлов.

Загрузите автономный скрипт runmode:

// @ts-ignore
import CM = require('codemirror/addon/runmode/runmode-standalone')
// JS mode
import 'codemirror/mode/javascript/javascript'

Оперативное исправление (используя пакет исправлений для сохранения изменений в моем проекте) :

// Start of node_modules/codemirror/lib/codemirror.js

// This avoids loading CodeMirror if it is already loaded through standalone
(function (global, factory) {
  if (self.CodeMirror) {
    factory = function() { return self.CodeMirror }
  }
// Start of node_modules/codemirror/addon/runmode/runmode-standalone.js

self.CodeMirror = {} // instead of window.CodeMirror

Обратите внимание, что это решение работает в Web Worker и с полным CodeMirror в браузере ah да!

...