JS代码编辑器Monaco使用指南与踩坑记录

作者:工具松鼠

时间:2026-10-24

浏览:534

本文介绍基于VS Code内核的Monaco Editor在Web项目中的集成方法,涵盖安装、初始化及自定义自动补全功能的实现。同时记录了在实际开发中遇到的包体积过大、提示功能不稳定及Webpack配置复杂等常见问题,为开发者提供实用的参考与避坑建议。

文章目录

前言

本文旨在解决代码编辑器的特定需求,包括语法高亮显示、函数智能提示、自动换行以及代码折叠功能。

Monaco编辑器简介

Monaco Editor由微软开发,其核心代码直接源自VS Code。它支持多种编程语言,并具备缩略地图(Overview Ruler)等高级功能。然而,该编辑器存在提示功能有时不可用以及整体包体积较大的缺点。

前言

官方资源与文档

如需了解详细信息,可访问[官方文档](https://microsoft.github.io/monaco-editor/index.html),查看[在线演示示例](https://github.com/Microsoft/monaco-editor-samples),或查阅[GitHub仓库](https://github.com/Microsoft/monaco-editor)。

安装步骤

可通过以下命令进行安装: yarn add monaco-editor 或 npm install monaco-editor

引入模块


import * as monaco from 'monaco-editor' // 包体很大了 但是demo可以跑起来

//自定义一些提示函数
const suggestions = [
  {
    label: 'split_chinese',
    insertText: 'split_chinese(inputString,language);', // 不写的时候不展示。。
    detail:
      'inputString:need split string\n' +
      'language:\nCH_T:traditional Chinese\nCH_S:Chinese Simplified\n HK_T:Hong Kong Traditional\nTW_T:Taiwan Traditional\n'
  },
  {
    label: 'uuid',
    insertText: 'var uuid = uuid();',
    detail: 'generate uuid'
  },
  {
    label: 'HashMap',
    insertText: 'var hashMap = new HashMap();',
    detail: 'create hash object'
  }
]

初始化编辑器实例。


mounted() {
    monaco.languages.registerCompletionItemProvider('JavaScript', {
      provideCompletionItems() {
        return {
          suggestions: suggestions
        }
      },
      triggerCharacters: [' ', '.'] // 写触发提示的字符,可以有多个
    })
    let self = this
    setTimeout(function () {
      self.init()
    }, 50) //因为父组件还未传参 子组件已经渲染
  }
  
 //初始化方法
init(script) {
  let self = this
  if (script) this.code = script
  self.$refs.container.innerHTML = ''
  var editor = monaco.editor.create(this.$refs.container, {
    value: this.code,
    language: 'javascript',
    minimap: {
      enabled: false
    },
    fontSize: '12px',
    fixedOverflowWidgets: true // 超出编辑器大小的使用fixed属性显示
  })
  editor.onDidChangeModelContent(function () {
    self.$emit('update:code', editor.getValue()) //用来监听编辑器内容变化,将内容传给父组件
  })
}

HTML结构示例


<template>
  <div ref="container" class="monaco"></div>
</template>

CSS样式配置


<style scoped>
.monaco {
  width: 95%;
  height: 400px;
  border: 1px solid #dcdfe6;
  text-align: left;
  margin-right: 20px;
  border-radius: 4px;
}
</style>

 

运行效果展示

前言

存在的问题与局限性

经过实际测试,该方案存在较多缺陷,因此最终未采用此方案。尽管代码示例仍可运行,且有客户反馈存在但体验不佳,但这主要归因于配置不当。Monaco Editor在实际使用中确实存在诸多难点,特别是自动提示功能在常规情况下往往无法正常工作。此外,其包体积庞大,可能达到3.9G,这是一个严重问题。虽然尝试通过按需引入来优化,但不完整引入会导致提示功能失效,且自定义函数提示的实现较为复杂。同时,Webpack的配置过程繁琐,需要反复调试。

以上为JS编译器Monaco使用教程的详细内容,更多关于JS编译器Monaco的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章