JS代碼編譯器Monaco使用方法
前言
我的需求是可以語(yǔ)法高亮、函數(shù)提示功能、自動(dòng)換行、代碼折疊
Monaco
Monaco是微軟家的,支持的語(yǔ)言很多,還有縮略地圖,有時(shí)候提示不好用然后包體很大。
The Monaco Editor is the code editor that powers VS Code.

使用方法官網(wǎng)
[官方文檔](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可以跑起來(lái)
//自定義一些提示函數(shù)
const suggestions = [
{
label: 'split_chinese',
insertText: 'split_chinese(inputString,language);', // 不寫(xiě)的時(shí)候不展示。。
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: [' ', '.'] // 寫(xiě)觸發(fā)提示的字符,可以有多個(gè)
})
let self = this
setTimeout(function () {
self.init()
}, 50) //因?yàn)楦附M件還未傳參 子組件已經(jīng)渲染
}
//初始化方法
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()) //用來(lái)監(jiān)聽(tīng)編輯器內(nèi)容變化,將內(nèi)容傳給父組件
})
}
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>
運(yùn)行效果

缺點(diǎn)
我的推翻了,不想再跑一下,代碼還在就寫(xiě)一個(gè)demo。運(yùn)行還是可以的(有客戶使用但也反饋不好用,是我自己的鍋,不配使用Monaco)真的很難用,特別是提示的功能,一般情況下是沒(méi)有提示的。然后一個(gè)包很大,好像有3.9G(嚴(yán)重)??赡軟](méi)有按需引入,但是不引入沒(méi)有提示功能,自定義函數(shù)提示。還有webpack配置,來(lái)回折騰!
以上就是JS編譯器Monaco使用教程的詳細(xì)內(nèi)容,更多關(guān)于JS編譯器Monaco的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript 通用簡(jiǎn)單的table選項(xiàng)卡實(shí)現(xiàn)
鑒于UI妹妹每次交付過(guò)來(lái)的選項(xiàng)卡都夾帶了多多少少的js,而且每遇到選項(xiàng)卡就加一點(diǎn)js,造成垃圾低劣代碼逐漸堆積過(guò)多了,一直想做一個(gè)通用簡(jiǎn)潔的選項(xiàng)卡庫(kù)。2010-05-05
微信小程序tab切換可滑動(dòng)切換導(dǎo)航欄跟隨滾動(dòng)實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序tab切換可滑動(dòng)切換導(dǎo)航欄跟隨滾動(dòng)實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
js 中獲取制定的cook信息實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇js 中獲取制定的cook信息實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
JavaScript常見(jiàn)事件源與事件流的獲取方法及解析
這篇文章主要為大家介紹了JavaScript常見(jiàn)事件源與事件流的獲取方法及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
JavaScript中去掉數(shù)組中的重復(fù)值的實(shí)現(xiàn)方法
百度面試時(shí)問(wèn)的一道題目,蠻常規(guī)的,但是當(dāng)時(shí)自己的回答挺差勁的?,F(xiàn)在總結(jié)記錄下~2011-08-08
基于javascript的無(wú)縫滾動(dòng)動(dòng)畫(huà)實(shí)現(xiàn)2
這篇文章主要介紹了基于javascript的無(wú)縫滾動(dòng)動(dòng)畫(huà)實(shí)現(xiàn)2,文章通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
JS大坑之19位數(shù)的Number型精度丟失問(wèn)題詳解
這篇文章主要介紹了JS大坑之19位數(shù)的Number型精度丟失問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
只需一行代碼,輕松實(shí)現(xiàn)一個(gè)在線編輯器
在瀏覽器地址欄中輸入一行代碼:data:text/html, <html contenteditable> ,回車即可把瀏覽器變臨時(shí)編輯器(需要瀏覽器支持 HTML5 屬性 contenteditable)2013-11-11
javascript動(dòng)畫(huà)之模擬拖拽效果篇
其實(shí)javascript本身是具有原生拖放功能的,但是由于兼容性問(wèn)題,以及功能實(shí)現(xiàn)的方式,用的不是很廣泛。javascript動(dòng)畫(huà)廣泛使用的還是模擬拖拽。本文將詳細(xì)介紹javascript的模擬拖拽,有需要的可以參考借鑒。2016-09-09
javascript中json對(duì)象json數(shù)組json字符串互轉(zhuǎn)及取值方法
這篇文章主要介紹了javascript中json對(duì)象json數(shù)組json字符串互轉(zhuǎn)及取值方法,需要的朋友可以參考下2017-04-04

