Monaco-Editor在Vue中使用(实现代码编辑与diff代码比较)

article/2025/3/4 0:38:40

Monaco在线代码编辑器使用总结

1.什么是Monaco

Monaco编辑器是为VS代码提供支持的代码编辑器

官方API文档

2.Monaco Editor安装及使用

2.1安装

npm install monaco-editor --save-devnpm install monaco-editor-webpack-plugin --save-dev

2.2配置vue.config.js

const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
module.exports = {configureWebpack: {plugins: [new MonacoWebpackPlugin()]}
}

2.3 开始使用

2.3.1.vue文件中导入monaco
import * as monaco from 'monaco-editor'
2.3.2.创建代码编辑区域
 <div ref="container" class="monaco-editor"></div>

2.3.3.初始化container

2.3.3.1 准备monaco基础配置
  data () {return {// 主要配置defaultOpts: {// 编辑器的值value: '',// 编辑器主题:vs, hc-black, or vs-dark,更多选择详见官网theme: 'vs-dark',// 右侧不显示编辑器预览框roundedSelection: true, // 自动缩进autoIndent: true ,// 是否只读readOnly: false, // 语言类型java,c,php更多选择详见官网language: 'javascript', }// 编辑器对象monacoEditor: {}}},
2.3.3.2 初始化monaco编辑器
methods: {init () {// 初始化container的内容,销毁之前生成的编辑器this.$refs.container.innerHTML = ''// 生成编辑器配置let editorOptions = Object.assign(this.defaultOpts, this.opts)// 生成编辑器对象this.monacoEditor = monaco.editor.create(this.$refs.container, editorOptions)// 编辑器内容发生改变时触发this.monacoEditor.onDidChangeModelContent(() => {this.$emit('change', this.monacoEditor.getValue())})},// 手动编辑器中的内容getValue() {this.$message.info(this.$refs.monaco.getVal())},
}
整体源码:
  1. monacoeditor.vue
<template><divref="container"class="monaco-editor":style="`height: ${height}px`"></div>
</template>
<script>
import * as monaco from 'monaco-editor'
export default {name: 'AcMonaco',props: {opts: {type: Object,default () {return {}}},height: {type: Number,default: 300}},data () {return {// 主要配置defaultOpts: {value: '', // 编辑器的值theme: 'vs-dark', // 编辑器主题:vs, hc-black, or vs-dark,更多选择详见官网roundedSelection: true, // 右侧不显示编辑器预览框autoIndent: true // 自动缩进},// 编辑器对象monacoEditor: {}}},watch: {opts: {handler () {this.init()},deep: true}},mounted () {this.init()},methods: {init () {// 初始化container的内容,销毁之前生成的编辑器this.$refs.container.innerHTML = ''// 生成编辑器配置let editorOptions = Object.assign(this.defaultOpts, this.opts)// 生成编辑器对象this.monacoEditor = monaco.editor.create(this.$refs.container, editorOptions)// 编辑器内容发生改变时触发this.monacoEditor.onDidChangeModelContent(() => {this.$emit('change', this.monacoEditor.getValue())})},// 供父组件调用手动获取值getVal () {return this.monacoEditor.getValue()}}
}
</script>
  1. App.vue

<template><div><div id="app"><imgalt="Vue logo"style="width: 200px; height: 200px"src="./assets/logo.png"/><h1>Easy-CodeEditor</h1><div>语言:<el-selectv-model="opts.language"clearableplaceholder="请选择"size="mini"@change="changeLanguage"><el-optionv-for="item in sets.language":key="item":label="item":value="item"></el-option></el-select>样式风格:<el-selectv-model="opts.theme"clearableplaceholder="请选择"size="mini"@change="changeTheme"><el-optionv-for="item in sets.theme":key="item":label="item":value="item"></el-option></el-select><el-button type="primary" size="mini" @click="getValue">获取内容</el-button></div></div><div><!--调用子组件--><monacoref="monaco":opts="opts"@change="changeValue":height="600"></monaco></div></div>
</template>
<script>
import monaco from './components/monacoeditor'
export default {components: { monaco },data () {return {sets: {language: {'apex': 'apex','azcli': 'azcli','bat': 'bat','c': 'c','clojure': 'clojure','coffeescript': 'coffeescript','cpp': 'cpp','csharp': 'csharp','csp': 'csp','css': 'css','dockerfile': 'dockerfile','fsharp': 'fsharp','go': 'go','graphql': 'graphql','handlebars': 'handlebars','html': 'html','ini': 'ini','java': 'java','javascript': 'javascript','json': 'json','kotlin': 'kotlin','less': 'less','lua': 'lua','markdown': 'markdown','msdax': 'msdax','mysql': 'mysql','objective-c': 'objective-c','pascal': 'pascal','perl': 'perl','pgsql': 'pgsql','php': 'php','plaintext': 'plaintext','postiats': 'postiats','powerquery': 'powerquery','powershell': 'powershell','pug': 'pug','python': 'python','r': 'r','razor': 'razor','redis': 'redis','redshift': 'redshift','ruby': 'ruby','rust': 'rust','sb': 'sb','scheme': 'scheme','scss': 'scss','shell': 'shell','sol': 'sol','sql': 'sql','st': 'st','swift': 'swift','tcl': 'tcl','typescript': 'typescript','vb': 'vb','xml': 'xml','yaml': 'yaml'},theme: {'vs': 'vs','vs-dark': 'vs-dark','hc-black': 'hc-black'}},opts: {value: '',readOnly: false, // 是否可编辑language: 'javascript', // 语言类型theme: 'vs-dark' // 编辑器主题}}},methods: {changeLanguage (val) {this.opts.language = val},changeTheme (val) {this.opts.theme = val},// 手动获取值getValue () {this.$message.info('代码已输出至控制台');console.log('输出代码:' + this.$refs.monaco.getVal())},// 内容改变自动获取值changeValue (val) {console.log(val)}}
}
</script>
<style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>
2.3.3.3 效果:

在这里插入图片描述

2.3.3.4 注意:

1)当我们修改了defaultOpts的配置后我们需要重新初始化monaco编辑器;即重新执行this.init();

2.4 编辑器代码diff的实现

init () {// 初始化container的内容,销毁之前生成的编辑器this.$refs.container.innerHTML = ''// 生成编辑器配置let editorOptions = Object.assign(this.defaultOpts, this.opts)editorOptions.readOnly = true;editorOptions.language = 'javascript'// 初始化编辑器实例this.monacoDiffInstance = monaco.editor.createDiffEditor(this.$refs['container'],editorOptions)this.monacoDiffInstance.setModel({// oldValue为以前的值original: monaco.editor.createModel(this.oldValue, editorOptions.language),// oldValue为新的值modified: monaco.editor.createModel(this.newValue, editorOptions.language)})}

效果::
在这里插入图片描述

2.4.1切换为行内比较
//直接升级配置项 renderSideBySide: false 即可
this.monacoDiffInstance.updateOptions({renderSideBySide: false});

效果:
在这里插入图片描述

本文章项目地址


http://chatgpt.dhexx.cn/article/rvaKUSoP.shtml

相关文章

程序员必备 代码比较工具 Beyond Compare 4

封面图 推荐一个代码比较工具&#xff0c;名字叫 Beyond Compare 4&#xff0c;真得很好用&#xff0c;选择两个文件夹&#xff0c;然后两边会同步打开都有的文件夹/文件&#xff0c;打开文件后&#xff0c;标有红色的地方就是两个文件的不同处。唯一缺点就是试用期只有 30 天&…

代码对比工具,我就用这6个!

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标” 回复“加群”获取入群讨论资格&#xff01; 程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍六款程序员常用的代码比较工具。 WinMerge WinMer…

代码对比工具,我就用这 6 个!

作者&#xff1a;yueliang2100 blog.csdn.net/yueliang2100/article/details/82190257 在程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍六款程序员常用的代码比较工具。 1、WinMerge WinMerge是一款运行于W…

代码比较工具-beyond Compare4.0

超好用文件对比工具 – Beyond Compare 具备的丰富实用功能&#xff1a; - 并列比较文件夹、FTP 网站或 Zip 文件&#xff1b; - 为以后的比较保存快照&#xff1b; - 类似浏览器的界面&#xff1b; - 可扩展子文件夹&#xff1b; - 隐藏比较不需要的文件夹&#xff1b; …

程序员喜欢的5款最佳代码比较工具

俗话说&#xff1a;三句不离本行&#xff0c;对于程序员这个可爱的群体来说也是一样&#xff0c;即使面对无休无止的编程工作&#xff0c;程序员们依旧任劳任怨的埋头苦干&#xff0c;梦想着用自己码下的代码改变世界。工欲善其事,必先利其器&#xff0c;每一位程序员都有自己私…

几款比较常用的代码比较工具

文章来源&#xff1a;分享几款比较常用的代码比较工具 俗话说&#xff1a;三句不离本行&#xff0c;对于程序员这个可爱的群体来说也是一样&#xff0c;即使面对无休无止的编程工作&#xff0c;程序员们依旧任劳任怨的埋头苦干&#xff0c;梦想着用自己码下的代码改变世界。工欲…

Beyond Compare 代码比较工具

一、下载 官网下载地址&#xff1a; https://www.scootersoftware.com/download.php 选择 Windows 系统&#xff0c;简体中文版本&#xff0c;点击下载。 下载完成 二、安装 步骤1&#xff1a;双击安装包 步骤2&#xff1a;进入安装向导&#xff0c;点击下一步 步骤3&a…

分享几款比较常用的代码比较工具

公众号关注 “大鱼机器人” 设为 “星标”&#xff0c;重磅干货&#xff0c;第一时间送达&#xff01; 素材来源&#xff1a;网络 作者&#xff1a;yueliang2100 整理&#xff1a;strongerHuang 俗话说&#xff1a;三句不离本行&#xff0c;对于程序员这个可爱的群体来说也是一…

程序员代码对比工具,就用这7个!

来源公众号&#xff1a;搜云技术库 在程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍7款程序员常用的代码比较工具。 一、WinMerge 图片 WinMerge是一款运行于Windows系统下的文件比较和合并工具&#xff0c;…

代码比较工具Beyond Compare 4(亲测有效)

代码比较工具Beyond Compare 4 一、便携免安装破解版&#xff0c;下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1vGKnPh6WMhk_bYJyJyKqXw 提取码&#xff1a;dasf 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 便携免安装破解版&#xff0…

程序员常用的代码比较工具,你更喜欢哪款?

目录 &#x1f4a1; Linux 命令行的对比工具 一. diff 二. vimdiff命令 &#x1f4a1; GUI 比对工具 三. WinMerge 四. Diffuse 五. Code Compare 六. Beyond Compare 七. UltraCompare 八. Altova DiffDog 九. Kompare 十. Meld 十一. XXdiff 十二. KDiff3 十…

9款代码比较工具

对于经常写代码&#xff0c;又改代码的程序员来说&#xff0c;如果之前写的代码&#xff0c;过了很久又需要改&#xff0c;那么查找不同之处相当困难。如果这时候有一款代码比较工具&#xff0c;将会非常方便。W3Cschool 资深用户归纳总结 9 款常用的代码比较工具&#xff0c;赶…

VSCode批量代码比较

前言 最近因为工作原因&#xff0c;需要找出一个工程里面修改过的地方。VSCode里自带代码比较功能&#xff0c;可以高亮代码不同的地方。然而手动一个个打开文件来比较显然非常的繁琐&#xff0c;在网上检索后发现并没有相关的方法。因此&#xff0c;为了解决这个问题&#xf…

三款免费好用的代码对比工具,丢弃BeyondCompare

代码比较是日常开发经常需要做的工作&#xff0c;比如说源代码对比、文档对比&#xff0c;甚至是excel表格对比。 这里推荐三款免费的对比工具。 1、winMerge 下载地址&#xff1a;https://winmerge.org/downloads/?langen winMerge的大小只有7M&#xff0c;轻量级&#xf…

开发者需要的 9 款代码比较工具

对于经常写代码&#xff0c;又改代码的程序员来说&#xff0c;如果之前写的代码&#xff0c;过了很久又需要改&#xff0c;那么查找不同之处相当困难。如果这时候有一款代码比较工具&#xff0c;将会非常方便。W3Cschool 资深用户归纳总结 9 款常用的代码比较工具&#xff0c;赶…

9款优秀的代码比对工具

我们知道两个文件之间&#xff0c;或者同一个文件的不同版本之间经常需要做内容比对。在 Windows下有个很强大的工具叫作 BeyondCompare &#xff0c;那在 Linux下需要用到什么工具呢&#xff1f; 本文介绍 9 种 Linux 下常用的 9 种代码比对工具&#xff0c;不仅有命令行工具…

代码对比工具,我就用这6个

文章工具来源于微信公众号 IT星球 在程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍六款程序员常用的代码比较工具 WinMerge WinMerge是一款运行于Windows系统下的文件比较和合并工具&#xff0c;使用它可…

Oracle中joint,什么是关节中心化(Joint centration)?

原标题&#xff1a;什么是关节中心化(Joint centration)? ⭕关节中心化(Joint centration) 想要有最佳的动作模式&#xff0c;就必须先有良好的关节中心化。良好的关节中心化要有好的神经肌肉的控制、好的关节面以及好的动力链所组成。一般来说&#xff0c;关节中心化就是稳定…

杵臼关节(发)

杵臼关节、 阿基米德、 多面体 1. 中国数学家华罗庚说过这样一段话:       「宇宙之大、粒子之微、火箭之速、化工之巧、地        球之变、生物之谜、日用之繁、无处不用数学。」 (《华罗庚科普著作选集》,上海教育出版社, 1984 ;原刊于 1959 年 5 月28日《人…

2021-12-25 infoGAN

Info-GAN: VAE-GAN: 真正的image image先ENCODER再DECODER产生 从nomal distribution中通过generator生成的 BiGAN: Autoencoder