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

配置BlazorMonaco编辑器时遇ReferenceError: monaco未定义错误

解决BlazorMonaco编辑器"monaco is not defined"错误

针对你遇到的monaco is not defined以及loader.js中properties of undefined (reading 'define')错误,可尝试以下解决方案:

1. 调整脚本加载位置与顺序

将原放在<head>中的脚本标签移至_Host.cshtml(Blazor Server)或index.html(Blazor WebAssembly)的<body>末尾,且确保顺序如下:

<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
<script>
    // 手动指定monaco的资源路径,避免加载路径错误
    require.config({ paths: { 'vs': '_content/BlazorMonaco/lib/monaco-editor/min/vs' } });
</script>
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
<script src="_content/BlazorMonaco/jsInterop.js"></script>
<!-- 放在Blazor框架脚本之前 -->
<script src="_framework/blazor.server.js"></script>

注:Blazor Server环境下,脚本过早加载可能导致DOM未就绪,monaco无法完成初始化。

2. 确保静态资源正确部署

  • 清理并重建项目:执行dotnet clean后再dotnet build,确保NuGet包中的静态资源(_content/BlazorMonaco下的文件)正确复制到输出目录。
  • 直接检查输出目录:确认bin/Debug/netX/_content/BlazorMonaco/lib/monaco-editor路径下存在完整的min版文件。

3. 延迟编辑器初始化

在Razor组件中,通过OnAfterRenderAsync确保JS资源加载完成后再渲染编辑器:

@using BlazorMonaco
@using BlazorMonaco.Editor
@implements IAsyncDisposable

<h3>Code Editor</h3>

@if (_isJsLoaded)
{
    <StandaloneCodeEditor @ref="_editor" Id="sample-code-editor-123" ConstructionOptions="EditorConstructionOptions" />
}

@code {
    private StandaloneCodeEditor _editor = null!;
    private bool _isJsLoaded;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            // 等待monaco初始化完成,或通过JS互操作确认monaco对象存在
            await Task.Delay(500);
            _isJsLoaded = true;
            StateHasChanged();
        }
    }

    private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor)
    {
        return new StandaloneEditorConstructionOptions
        {
            Language = "javascript",
            GlyphMargin = true,
            Value = "\"use strict\";
" +
                    "function Person(age) {
" +
                    "   if (age) {
" +
                    "       this.age = age;
" +
                    "   }
" +
                    "}
" +
                    "Person.prototype.getAge = function () {
" +
                    "   return this.age;
" +
                    "};
"
        };
    }

    public async ValueTask DisposeAsync()
    {
        await _editor?.DisposeAsync()!;
    }
}

4. 检查版本兼容性

  • 确认BlazorMonaco NuGet包版本与你的Blazor项目版本匹配(比如Blazor 6/7/8对应兼容的BlazorMonaco版本)。
  • 尝试升级到BlazorMonaco的最新稳定版,修复已知的初始化问题。

不需要额外安装Monaco相关包,BlazorMonaco已内置所需的Monaco Editor资源。

内容的提问来源于stack exchange,提问作者Petrone Moolman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:23:38