You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在已加载RequireJS的环境中引入Monaco Editor的loader.js?

Using Monaco Editor Loader with Existing RequireJS

Absolutely, you can integrate Monaco Editor's loader.js into an environment where RequireJS is already loaded—you just need to resolve the conflict between the two AMD loaders (both expose global require/define methods which would overwrite each other if left unhandled).

Here's a reliable approach to make them coexist:

  1. Preserve RequireJS's global methods first
    Before loading Monaco's loader, save references to RequireJS's require and define so we can restore them later:

    // Save original RequireJS methods before Monaco loader overwrites them
    const originalRequire = window.require;
    const originalDefine = window.define;
    
  2. Load Monaco's loader and isolate its methods
    Dynamically load Monaco's loader.js, then immediately capture its version of require/define and restore RequireJS's globals:

    // Create and load the Monaco loader script
    const monacoLoaderScript = document.createElement('script');
    monacoLoaderScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.11.1/min/vs/loader.js';
    monacoLoaderScript.onload = function() {
        // Store Monaco's loader methods under a unique global name
        window.monacoRequire = window.require;
        window.monacoDefine = window.define;
    
        // Restore RequireJS's original global methods
        window.require = originalRequire;
        window.define = originalDefine;
    
        // Now configure Monaco's loader using the isolated `monacoRequire`
        monacoRequire.config({
            paths: {
                'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.11.1/min/vs'
            }
        });
    
        // Load and initialize Monaco Editor
        monacoRequire(['vs/editor/editor.main'], function() {
            // Your editor initialization code here
            const editor = monaco.editor.create(document.getElementById('editor-container'), {
                value: '// Hello from Monaco + RequireJS!',
                language: 'javascript',
                theme: 'vs-dark'
            });
        });
    };
    document.head.appendChild(monacoLoaderScript);
    

Why your initial approach had issues

When you call AMDLoader.init() directly, Monaco's loader still tries to take over the global require/define namespace, which clashes with RequireJS. By isolating Monaco's loader methods into a separate variable (monacoRequire), you keep both loaders working independently without interference.

This method ensures RequireJS continues to handle your existing modules, while Monaco's loader manages its own dependencies exclusively.

内容的提问来源于stack exchange,提问作者Elio Struyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:16:47