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

如何在Vite+Vue3项目中官方集成Monaco Editor?求助配置vite.config.ts

如何在Vite中官方集成Monaco Editor(无需第三方插件)

步骤1:安装依赖

首先安装monaco-editor核心包:

npm install monaco-editor
# 或使用pnpm/yarn
pnpm add monaco-editor

步骤2:修改vite.config.ts

添加Monaco worker的优化配置,解决开发和打包阶段的资源加载问题:

import { defineConfig } from 'vite'
// 若使用Vue/React框架,导入对应插件,比如:
// import vue from '@vitejs/plugin-vue'

export default defineConfig({
  // plugins: [vue()], // 根据你的项目框架添加
  optimizeDeps: {
    // 预编译Monaco的各语言worker文件
    include: [
      'monaco-editor/esm/vs/language/json/json.worker',
      'monaco-editor/esm/vs/language/css/css.worker',
      'monaco-editor/esm/vs/language/html/html.worker',
      'monaco-editor/esm/vs/language/typescript/ts.worker',
      'monaco-editor/esm/vs/editor/editor.worker'
    ]
  },
  build: {
    rollupOptions: {
      output: {
        // 将不同worker拆分为独立chunk,减小主包体积
        manualChunks: {
          jsonWorker: ['monaco-editor/esm/vs/language/json/json.worker'],
          cssWorker: ['monaco-editor/esm/vs/language/css/css.worker'],
          htmlWorker: ['monaco-editor/esm/vs/language/html/html.worker'],
          tsWorker: ['monaco-editor/esm/vs/language/typescript/ts.worker'],
          editorWorker: ['monaco-editor/esm/vs/editor/editor.worker']
        }
      }
    }
  }
})

步骤3:在代码中初始化编辑器

以纯TS项目为例,在页面中创建编辑器实例:

import * as monaco from 'monaco-editor'

// 配置Monaco的Worker加载路径
self.MonacoEnvironment = {
  getWorker(_: string, label: string) {
    switch (label) {
      case 'json':
        return new Worker(new URL('monaco-editor/esm/vs/language/json/json.worker', import.meta.url))
      case 'css':
      case 'scss':
      case 'less':
        return new Worker(new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url))
      case 'html':
      case 'handlebars':
        return new Worker(new URL('monaco-editor/esm/vs/language/html/html.worker', import.meta.url))
      case 'typescript':
      case 'javascript':
        return new Worker(new URL('monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url))
      default:
        return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url))
    }
  }
}

// 确保页面存在带ID的容器,且已设置高度(比如height: 600px)
const container = document.getElementById('monaco-container')
if (container) {
  const editor = monaco.editor.create(container, {
    value: 'console.log("Hello, Monaco Editor!");',
    language: 'javascript',
    theme: 'vs-dark' // 可选主题:vs/vs-dark/hc-black
  })

  // 可选:监听编辑器内容变化
  editor.onDidChangeModelContent(() => {
    console.log(editor.getValue())
  })

  // 页面销毁时销毁编辑器,避免内存泄漏
  window.addEventListener('beforeunload', () => {
    editor.dispose()
  })
}

关键注意事项

  • 编辑器容器必须设置固定高度,否则无法正常渲染
  • 若使用Vue/React组件,需在组件挂载完成后(如Vue的onMounted、React的useEffect)初始化编辑器,卸载时调用editor.dispose()
  • 若仅使用特定语言(如仅JavaScript),可只配置对应语言的worker,减少打包体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:50:03