【问题标题】: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 ?是的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多