# CodeEditor-MPNACO **Repository Path**: cathyli2021/code-editor-mpnaco ## Basic Information - **Project Name**: CodeEditor-MPNACO - **Description**: Monaco-Editor 是一个由 Microsoft 开发的 Web 代码编辑器,它是 Visual Studio Code 的浏览器版本。在 Vue 项目中集成 Monaco-Editor 可以提供代码编辑、语法高亮、智能提示等功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-05-27 - **Last Updated**: 2024-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # easy-codeeditor # Monaco在线代码编辑器使用总结 ## 1.什么是Monaco Monaco编辑器是为VS代码提供支持的代码编辑器 [官方API文档](https://microsoft.github.io/monaco-editor/api/modules/monaco.editor.html) ## 2.Monaco Editor安装及使用 #### 2.1安装 ```cmd npm install monaco-editor --save-dev npm install monaco-editor-webpack-plugin --save-dev ``` #### 2.2配置vue.config.js ```js const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin') module.exports = { configureWebpack: { plugins: [ new MonacoWebpackPlugin() ] } } ``` #### 2.3 开始使用 ##### 2.3.1.vue文件中导入monaco ```js import * as monaco from 'monaco-editor' ``` ##### 2.3.2.创建代码编辑区域 ```html
``` #### 2.3.3.初始化container ##### 2.3.3.1 准备monaco基础配置 ```js 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编辑器 ```js 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** ```html ``` 2) **App.vue** ```html ``` ##### 2.3.3.3 效果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210319153511554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTA4NTgyMg==,size_16,color_FFFFFF,t_70) ##### 2.3.3.4 注意: 1)当我们修改了defaultOpts的配置后我们需要重新初始化monaco编辑器;即重新执行this.init(); #### 2.4 编辑器代码diff的实现 ```js 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) }) } ``` **效果:**: ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021031915354219.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTA4NTgyMg==,size_16,color_FFFFFF,t_70) ##### 2.4.1切换为行内比较 ```js //直接升级配置项 renderSideBySide: false 即可 this.monacoDiffInstance.updateOptions({ renderSideBySide: false }); ``` **效果:** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210319153558909.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTA4NTgyMg==,size_16,color_FFFFFF,t_70) ### [本文章项目地址](https://github.com/Jason-chen-coder/easy-codeEditor) ## Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Lints and fixes files ``` npm run lint ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/).