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 相关文章推荐
JS实现根据出生年月计算年龄
Jan 10 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
纯js实现遮罩层效果原理分析
May 27 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
jquery实用技巧之输入框提示语句
Jul 28 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
JavaScript 截取字符串代码实例
Sep 05 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
Vue学习之axios的使用方法实例分析
Jan 06 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 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实现阳历阴历互转的方法
2015/10/28 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
"引用"与多态的关系
2013/02/01 面试题
农村改厕实施方案
2014/03/22 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers
关于的python五子棋的算法
2022/05/02 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS