# Monaco Editor 使用

news2024/12/23 14:08:27

Monaco Editor 使用

文章目录

  • Monaco Editor 使用
    • 安装依赖
        • 版本问题
          • vue2
          • Vue3
      • webpack-dev-server
      • monaco-editor-webpack-plugin
        • Version Matrix
    • 集成步骤
      • Vue2 配置 monaco-editor-webpack-plugin 插件
      • Vue3 vue.config.js
      • 测试页面实例
      • 属性说明
      • 支持的语言类型
    • 报错解决
      • 控制台报错
    • 效果图
    • 源代码地址

  • Monaco EditorVS Code底层的代码编辑器,开源协议是MIT,支持EdgeChromeFirefoxSafariOpera浏览器,但是不支持移动端浏览器或移动端框架。
  • VSCode中的代码编辑器和Monaco Editor使用的很多相同的核心模块,你可以将Monaco Editor用到自己的项目中,作为云端编辑器的支持。

安装依赖

版本问题

vue2
  • 注意版本问题:版本问题很坑爹
"monaco-editor": "^0.30.1",
"monaco-editor-webpack-plugin": "^6.0.0",
"webpack": "^3.6.0",
Vue3
npm install monaco-editor --save
npm install monaco-editor-webpack-plugin --save   //必须局部安装,不能全局安装否则会导致代码不高亮,不补全

webpack-dev-server

webpack-dev-server v4.0.0+ 要求 node >= v12.13.0webpack >= v4.37.0(但是我们推荐使用 webpack >= v5.0.0)和 webpack-cli >= v4.7.0

monaco-editor-webpack-plugin

  • 官网:https://www.npmjs.com/package/monaco-editor-webpack-plugin

Version Matrix

monaco-editor-webpack-pluginmonaco-editor
7.*.*>= 0.31.0
6.*.*0.30.*
5.*.*0.29.*
4.*.*0.25.*, 0.26.*, 0.27.*, 0.28.*
3.*.*0.22.*, 0.23.*, 0.24.*
2.*.*0.21.*
1.9.*0.20.*
1.8.*0.19.*
1.7.*0.18.*

集成步骤

Vue2 配置 monaco-editor-webpack-plugin 插件

  • webpack.config.js增加插件配置
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
module.exports = {
	configureWebpack: {
    	plugins: [
      		new MonacoWebpackPlugin()
    	]
  	}
}

Vue3 vue.config.js

let MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
// vue.config.js
const vueConfig = {
  configureWebpack: {
    // webpack plugins
    plugins: [
      // Ignore all locale files of moment.js
      new MonacoWebpackPlugin()
    ],
    // if prod, add externals
  },
}

测试页面实例

<template>
  <div>
    <h1>MonacoEditor 测试页面</h1>

    <div ref="editorContainer"
         class="editor"></div>
  </div>
</template>

<script>
import * as monaco from 'monaco-editor';
export default {
  name: 'MonacoEditor',
  data () {
    return {
      code: '',
      editor: null
    }
  },
  mounted () {
    this.init()
  },
  methods: {
    init () {
      // 初始化编辑器
      this.editor = monaco.editor.create(this.$refs.editorContainer, {
        value: this.code,
        language: 'javascript',
        tabSize: 2,
        scrollBeyondLastLine: false,
        automaticLayout: true, // 自动布局
        readOnly: false
      })
      console.log(this.editor)

      // 监听内容变化
      this.editor.onDidChangeModelContent(() => {

      })

      // 监听失去焦点事件
      this.editor.onDidBlurEditorText((e) => {
        console.log(e)
      });

      // 增加自定义菜单
      this.editor.addAction({
        id: '1123', // 菜单项 id
        label: '测试菜单', // 菜单项名称
        keybindings: [], // 绑定快捷键
        contextMenuGroupId: '1', // 所属菜单的分组
        run: () => {
          alert('菜单执行')
        }, // 点击后执行的操作
      })

      // 设置提示
      this.setPrompt()


    },
    // 设置错误提示
    setPrompt () {
      const model = this.editor.getModel()
      // json为语言类型
      monaco.editor.setModelMarkers(model, 'json', [{
        startLineNumber: 2, endLineNumber: 2, startColumn: 1, endColumn: 10, severity: monaco.MarkerSeverity.Error, message: `语法错误`,
      }])
    },
    // 获取编辑框内容
    getCodeContext () {
      return this.editor.getValue()
    },
    // 自动格式化代码
    format () {
      this.editor.trigger('anything', 'editor.action.formatDocument')
      // 或者
      // this.editor.getAction(['editor.action.formatDocument']).run()
    },
    changeEditor () {
      if (this.editor === null) {
        this.init()
      }

      const oldModel = this.editor.getModel()
      const newModel = monaco.editor.createModel(
        this.code,
        'javascript'
      )

      if (oldModel) {
        oldModel.dispose()
      }
      this.editor.setModel(newModel)
    }
  }
}
</script>

<style scoped>
.editor {
  width: 50%;
  min-height: 400px;
}
</style>

属性说明

{
    value: '', // 编辑器初始显示文字
    language: 'javascript', // 语言javascript | json
    automaticLayout: true, // 自动布局
    theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
    foldingStrategy: 'indentation', // 代码可分小段折叠
    overviewRulerBorder: false, // 不要滚动条的边框
    lineNumbers: 'off', // 控制行号的出现on | off
    scrollbar: { // 滚动条设置
      verticalScrollbarSize: 4, // 竖滚动条
      horizontalScrollbarSize: 6, // 横滚动条
    },
    readOnly: false, // 是否只读 Defaults to false | true
    minimap: { // 关闭小地图
      enabled: false,
    },
    cursorStyle: 'line', // 光标样式
    automaticLayout: false, // 自动布局
    fontSize: 14, // 字体大小
    tabSize: 2, // tab缩进长度
    autoIndent: true, // 自动布局
}

支持的语言类型

在这里插入图片描述

报错解决

  • 注意版本对应

控制台报错

  • 版本问题
  • 报错如下:
editorSimpleWorker.js?db2f:450 
        
       Uncaught (in promise) Error: Unexpected usage
    at EditorSimpleWorker.loadForeignModule (editorSimpleWorker.js?db2f:450:1)
    at eval (webWorker.js?0a43:38:1)
  • 解决方法
// import * as monaco from 'monaco-editor';

// 使用下面的方式引入
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'
// 代码高亮
import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution'
// 引入查找控件
import 'monaco-editor/esm/vs/editor/contrib/find/findController.js' 

效果图

在这里插入图片描述

源代码地址

  • 码云:https://gitee.com/Marlon_Brando/qianduanxuexi/tree/develop/monaco-editor
  • https://gitee.com/Marlon_Brando/qianduanxuexi/tree/develop/monaco-editor-vue3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自适应滤波器更新算法-EP2

文章目录1、变步长 SC-MPNLMS 频域分块算法1.1 算法原理1.2 算法代码1.3 算法优缺点2、集成多种自适应滤波算法的回声消除器1.1 算法原理1.2 算法代码1.3算法优缺点1.4 算法自适应准则3、新的变步长的LMS自适应滤波算法3.1算法原理3.2算法代码3.3算法优缺点参考文献本文接上一篇…

钉钉小程序入门3—钉钉扫码登录PC端网站

第一部分、准备材料&#x1f332; 公网环境 老版钉钉扫码中必须要配置一个域名才可以调试&#xff0c;新版支持IP配置调了。我是手机打开热点&#xff0c;电脑连接热点进行调试的&#xff0c;比老版要方便了不少。 查看本机IP地址方法&#xff1a; 如果使用的Windows&#xff…

MySQL高可用复制管理工具 —— Orchestrator使用

Orchestrator介绍 Orchestrator&#xff08;orch&#xff09;&#xff1a;go编写的MySQL高可用性和复制拓扑管理工具&#xff0c;支持复制拓扑结构的调整&#xff0c;自动故障转移和手动主从切换等。后端数据库用MySQL或SQLite存储元数据&#xff0c;并提供Web界面展示MySQL复…

docker学习笔记2(狂神)

Docker的常用命令 然后我们来学我们最重要的镜像命令&#xff1a; docker images 查看所有本地的主机上的镜像 docker search搜索镜像&#xff1a; docker pull下载镜像&#xff1a; docker pull 镜像名[:tag] 指定版本下载&#xff1a; docker rmi删除镜像&#xff1a; 批量…

[附源码]Python计算机毕业设计Django市场摊位管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

m基于遗传优化的不同等级电动汽车充电站的选址方案matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 作为电动汽车的普及与推广&#xff0c;必要的基础配套服务设施、充电站的建设位置和选址规划对整体行业的发展起着重要的意义&#xff0c;本文中提出了一个不同等级电动汽车充电站的选址与求解算…

Zebec联合Visa推出实体借记卡持续利好生态,$ZBC表现强劲

Zebec生态从今年年初开始&#xff0c;持续的释放利好提振市场信心。此前&#xff0c;Zebec曾以 10 亿美元的完全稀释估值筹集了 850 万美元&#xff0c;该轮融资投资者包括 Circle Ventures、Shima 和 Resolute等知名 Web3 投资机构。这是 Zebec Protocol 继今年年初获得 2800 …

计算机系统基本概念

1.计算机的硬件结构 早期的计算机没有很复杂的图形功能&#xff0c;CPU的核心频率也不高&#xff0c;跟内存的频率一样&#xff0c;它们都是直接连接在同一个总线&#xff08;Bus&#xff09; 上的。由于IO设备诸如显示设备、键盘、软盘和磁盘等速度与CPU和内存相比还是慢很多…

QT:布局管理器消息盒子对话框

让组件在水平和垂直方向对齐 有三种常用布局管理器&#xff1a; 水平&#xff0c;QHBoxLayout 垂直&#xff0c;QVBoxLayout 网格&#xff0c;QGridLayout(使布局好的界面嵌套到主窗口) 1.让组件大小固定 修改属性&#xff1a;minimusize&#xff0c;maxmumsize 最小和最大组件…

使用setuptools构建python包

python包分发方式 源码包分发&#xff1a; 源码包安装过程是先解压&#xff0c;再编译。最后才安装&#xff0c;所以其是跨平台的&#xff0c;由于每次安装都需要进行编译&#xff0c;相对于二进制包安装方式来说安装速度较慢。 解压——编译——安装 源码包本质上是一个压缩…

CDGA|2023年数据治理发展前景预测步骤

CDGA|2023年数据治理发展前景预测步骤 数据治理发展前景预测&#xff0c;就是在数据治理市场调查获得的各种信息和资料的基础上&#xff0c;运用科学的预测技术和方法&#xff0c;对影响数据治理市场供求变化的诸因素进行调查研究&#xff0c;分析和预见数据治理发展趋势&…

《解构领域驱动设计》读书笔记

文章目录书籍信息开篇软件复杂度剖析复杂系统理解能力预测能力领域驱动设计概览基本概念控制软件复杂度领域驱动设计统一过程现存的不足领域驱动设计统一过程全局分析问题空间探索全局分析的 5W 模型高效沟通高效协作商业模式画布业务流程图服务蓝图用例图事件风暴学习循环价值…

windows系统下mysql的主从复制

使用一台物理机实现mysql的主从复制功能。 准备&#xff1a; 1、操作系统&#xff1a;Windows Server 2016 Standard 2、下载mysql免安装包&#xff1a; https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.17-winx64.zip 安装maser 1、解压mysql压缩包&…

Windows下安装hadoop2.7.4

Windows下安装hadoop 案例环境 该压缩包是已经简化配置后的 hadoop2.7.4下载地址文件分享 (weiyun.com) 安装步骤 解压压缩包 配置环境变量 在系统变量中添加 在path中添加 拷贝hadoop2.7.4\bin\hadoop.dll到目录C:\Windows\System32 配置文件 把/etc/hadoop/ 下目录的相…

玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一)

前面一篇关于智能合约翻译文讲到了&#xff0c;是一种计算机程序&#xff0c;既然是程序&#xff0c;那就可以使用程序语言去编写智能合约了。 而若想玩区块链上的项目&#xff0c;大部分区块链项目都是开源的&#xff0c;能看得懂智能合约代码&#xff0c;或找出其中的漏洞&a…

管理RMAN备份_维护RMAN备份和仓库记录

1&#xff0e;RMAN备份和仓库维护概述 1.1&#xff0e;备份和仓库维护的目的 建议的维护策略是配置一个快速恢复区域&#xff0c;一个备份保留策略和一个归档 redo日志删除策略。在这种情况中&#xff0c;数据库按需要自动维护和删除备份与归档redo日志。然而&#xff0c;有时…

[附源码]Python计算机毕业设计Django水果管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

阿里P8专家爆出:入职阿里必备的598道java面试题,内含算法

前言 之前也给大家分享过很多的面试题和大佬的面试经验&#xff0c;相信大家也已经利用到了&#xff0c;也顺利找到了工作&#xff0c;并拿到了高薪。 今天就给大家分享阿里P8专家长期以来面试所问到的java面试题&#xff0c;总共有598道&#xff08;含算法&#xff09;&…

PCL 使用MLS 上采样

移动最小二乘法MLS&#xff08;Moving Lest Squares&#xff09;简要介绍_Figure 09的博客-CSDN博客_移动最小二乘法 深入理解移动最小二乘法曲面拟合代码&#xff08;MLS2D.m&#xff09;_残影丶的博客-CSDN博客_mls2d PCL 点云采样_Σίσυφος1900的博客-CSDN博客 上采样…

和数集团浅谈区块链技术如何赋能数字政务?

在“十四五”提高数字政府建设水平的大环境下,构建数字政务发展体系是国家治理现代化的必然选择。2021年是2035远景目标的开局之年&#xff0c;《十四五规划纲要》中明确将区块链列为“十四五”七大数字经济重点产业之一。数字政务的体系架构和创新机理,离不开新兴技术融合互通…