摩纳哥编辑器:通过编辑器配置库

Monaco Editor: Configure libs by editor

我正在构建一个包含多个摩纳哥编辑器的页面。我目前通过以下方式控制我想使用的库:

monaco.languages.typescript.javascriptDefaults.addExtraLib(`

        interface Product {
          foo: String;
        }

        declare const product: Product;

`, 'global.d.ts')

通过使用此功能,所有编辑器都被迫使用完全相同的库。

是否可以通过编辑器实例而不是全局控制该行为?

长话短说:没有。

问题是 IStandaloneCodeEditor you create by calling monaco.editor.create () has no idea of any of the monaco.languages 当前可用并已注册。

解析由 monaco.workers, which get - for Java- and TypeScript - configured through monaco.languages.typescript 完成,并且是静态的而不是特定于实例的,因此一个工作人员可以服务多个实例。

我相信这个设计决定是为了提高效率和性能而做出的 - 对于许多具有(可能)许多不同库的实例来说可能 WebWorker 效率不是很高。

另请注意,这不是唯一不可配置的实例:通过任何 monaco.languages 语言定义可配置的所有内容都是全局的。

我不知道这是如何实现的,但如果你愿意了解发生了什么,Type- and JavaScript implementation is on GitHub (as well as Monaco's base)。

虽然它(可能)有点重性能,但这可能适合在 GitHub issue 中讨论。最后,如果这个被拒绝了,你还不如对投稿者对摩纳哥的实现有一个印象