【问题标题】:How can I run CodeMirror "runMode" in a Web Worker without having document is not defined?如何在未定义文档的情况下在 Web Worker 中运行 CodeMirror“runMode”?
【发布时间】:2020-02-26 02:06:22
【问题描述】:
我有一个(打字稿)编译器在 Web Worker 中运行,我需要它来解析脚本中文字值的源代码。我一直在为此使用 CodeMirror.runMode,它工作正常,但在 Web Worker 中加载 CodeMirror 会产生错误。
Uncaught ReferenceError: document is not defined
如何加载 CodeMirror 以解析 Web Worker 中的代码?
【问题讨论】:
标签:
typescript
web-worker
codemirror
【解决方案1】:
这是一个可行的解决方案:
CodeMirror 中有一个“runmode-standalone”脚本,可以满足我的需要。它可以工作,但我必须对某些文件进行一些热修复。
加载独立运行模式脚本:
// @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 ?是的!