• 前端工具 | JS编译器Monaco使用教程


     

    前言

    我的需求是可以语法高亮、函数提示功能、自动换行、代码折叠

    Monaco

    Monaco是微软家的,支持的语言很多,还有缩略地图,有时候提示不好用然后包体很大。
    The Monaco Editor is the code editor that powers VS Code.
    image.png

    使用方法

    • 官网
    [官方文档](https://microsoft.github.io/monaco-editor/index.html)
    [在线demo](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 {
       95%;
      height: 400px;
      border: 1px solid #dcdfe6;
      text-align: left;
      margin-right: 20px;
      border-radius: 4px;
    }
    </style>
    
    • 运行效果

    image.png

    缺点

    我的推翻了,不想再跑一下,代码还在就写一个demo。运行还是可以的(有客户使用但也反馈不好用,是我自己的锅,不配使用Monaco)真的很难用,特别是提示的功能,一般情况下是没有提示的。然后一个包很大,好像有3.9G(严重)。可能没有按需引入,但是不引入没有提示功能,自定义函数提示。还有webpack配置,来回折腾!

    芳妮酱总结

    今天我们改用了brace,真香。使用简单,基本需求满足,没有额外的配置

  • 相关阅读:
    蓝书3.6 割点与桥
    蓝书3.5 强连通分量
    蓝书3.4 差分约束系统
    蓝书3.3 SPFA算法的优化
    蓝书3.2 最短路
    蓝书3.1 最小生成树
    luogu 4630 [APIO2018] Duathlon 铁人两项
    Codeforces Round #124 (Div. 1) C. Paint Tree(极角排序)
    dutacm.club Water Problem(矩阵快速幂)
    dutacm.club 1094: 等差区间(RMQ区间最大、最小值,区间GCD)
  • 原文地址:https://www.cnblogs.com/onesea/p/15823423.html
Copyright © 2020-2023  润新知