JS代码编译器Monaco使用方法


Posted in Javascript onJune 11, 2021

前言

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

Monaco

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

JS代码编译器Monaco使用方法

使用方法官网

[官方文档](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 {
  width: 95%;
  height: 400px;
  border: 1px solid #dcdfe6;
  text-align: left;
  margin-right: 20px;
  border-radius: 4px;
}
</style>

 

运行效果

JS代码编译器Monaco使用方法

缺点

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

以上就是JS编译器Monaco使用教程的详细内容,更多关于JS编译器Monaco的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
js控制浏览器全屏示例代码
Feb 20 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
如何屏蔽防止别的网站嵌入框架代码
Aug 24 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
vscode 调试 node.js的方法步骤
Sep 15 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 Javascript
React中的Context应用场景分析
Jun 11 #Javascript
详解JVM系列之内存模型
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
一文搞懂redux在react中的初步用法
Jun 09 #Javascript
深入详解JS函数的柯里化
Jun 09 #Javascript
javascript canvas实现雨滴效果
用JS实现飞机大战小游戏
Jun 09 #Javascript
You might like
用Php实现链结人气统计
2006/10/09 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
jquery插件之easing使用
2010/08/19 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
Python实现多线程HTTP下载器示例
2017/02/11 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
pybind11在Windows下的使用教程
2019/07/04 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
django迁移文件migrations的实现
2020/03/31 Python
护理专业毕业生自我鉴定
2013/10/08 职场文书
学校安全教育制度
2014/01/31 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Django操作cookie的实现
2021/05/26 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android