【UmiJS项目】react-monaco-editor代码编辑器的安装与使用

news/2024/7/15 17:45:41 标签: react.js, 编辑器, javascript

一、git地址

  • monaco-editor
  • react-monaco-editor

二、安装

yarn add monaco-editor
yarn add react-monaco-editor
yarn add monaco-editor-webpack-plugin

注意: monaco-editormonaco-editor-webpack-plugin 需要按照以下对应版本来安装

请添加图片描述
本人使用的版本如下:

在这里插入图片描述

二、UmiJS配置

.umirc.ts 文件中进行如下配置:

import {defineConfig} from 'umi';
import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin';

export default defineConfig({
    ......
    chainWebpack(memo) {
    	// 代码高亮显示
        memo.plugin('monaco-editor').use(MonacoWebpackPlugin, [
            {
            	// 支持高亮显示的代码语言
                languages: ['json', 'xml', 'yaml', 'html', 'typescript']
            }
        ])
    }
});

支持的 languages 配置有:

javascript">'abap' | 'apex' | 'azcli' | 'bat' | 'cameligo' | 'clojure' | 'coffee' | 'cpp' | 'csharp' | 'csp' | 
'css' | 'dockerfile' | 'fsharp' | 'go' | 'graphql' | 'handlebars' | 'html' | 'ini' | 'java' | 'javascript' | 
'json' | 'kotlin' | 'less' | 'lua' | 'markdown' | 'mips' | 'msdax' | 'mysql' | 'objective-c' | 'pascal' | 
'pascaligo' | 'perl' | 'pgsql' | 'php' | 'postiats' | 'powerquery' | 'powershell' | 'pug' | 'python' | 'r' | 
'razor' | 'redis' | 'redshift' | 'restructuredtext' | 'ruby' | 'rust' | 'sb' | 'scheme' | 'scss' | 'shell' | 
'solidity' | 'sophia' | 'sql' | 'st' | 'swift' | 'tcl' | 'twig' | 'typescript' | 'vb' | 'xml' | 'yaml'

三、基本使用

import MonacoEditor, {MonacoDiffEditor} from "react-monaco-editor";

function CodeEditor() {
  const options: any = {
    selectOnLineNumbers: true,
    roundedSelection: false,
    readOnly: false,  // //是否只读  取值 true | false
    cursorStyle: "line",
    automaticLayout: false, // 自动布局
  };
  const [code, setCode] = useState('// language : typescript')
  const [theme, setTheme] = useState('vs-light')
  const [language, setLanguage] = useState('typescript')

  const onChange = (newValue: any) => {
    console.log("onChange", newValue); // eslint-disable-line no-console
  };

  const editorDidMount = (editor: any) => {
    console.log("editorDidMount", editor, editor.getValue(), editor.getModel());
  };
  
  return (
      <MonacoEditor
        width='1000'
        height="400"
        theme={theme}
        language={language}
        value={code}
        options={options}
        onChange={onChange}
        editorDidMount={editorDidMount}
      />
  );
}

export default CodeEditor;

四、自定义高亮语言

当我们想要高亮显示的代码语言 monaco-editor-webpack-plugin 默认不支持时,可以使用以下代码实现:自定义语言 - 代码高亮显示

import MonacoEditor, {MonacoDiffEditor} from "react-monaco-editor";
import * as monaco from 'monaco-editor';

function CodeEditor() {
  const options: any = {
    selectOnLineNumbers: true,
    roundedSelection: false,
    readOnly: false,  // //是否只读  取值 true | false
    cursorStyle: "line",
    automaticLayout: false, // 自动布局
  };
  const [code, setCode] = useState('# language : properties')
  
  useEffect(()=>{
    // 自定义高亮语言
    monaco.languages.register({ id: 'properties' })
    monaco.languages.setMonarchTokensProvider('properties', {
        ignoreCase: true, // 忽略大小写
        tokenizer: {
        	// root中为高亮规则
            root: [
                [/^\#.*/, 'comment'],
                [/.*\=/, 'key'],
                [/^=.*/, 'value'],
            ],
        }
    })
  },[])
  
  return (
      <MonacoEditor
        height="350"
        theme='vs-dark'
        language='properties'
        value={code}
        options={options}
      />
  );
}

export default CodeEditor;

五、踩的坑

1、启动项目报错

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
原因:monaco-editormonaco-editor-webpack-plugin 版本过高
在这里插入图片描述
建议使用以下版本:
在这里插入图片描述

2、代码不高亮

已经配置好了 monaco-editor-webpack-plugin,代码依旧不高亮显示

原因:

  1. 使用的语言 monaco-editor-webpack-plugin 默认不支持,可以设置自定义高亮语言
  2. monaco-editormonaco-editor-webpack-plugin 版本不匹配

3、Cannot find module ‘metadata.js’

在这里插入图片描述
原因:monaco-editormonaco-editor-webpack-plugin 版本不匹配

六、效果

在这里插入图片描述
在这里插入图片描述

七、完整代码

【React+TS+UmiJS】react-monaco-editor代码编辑器使用


http://www.niftyadmin.cn/n/321222.html

相关文章

SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)

系列文章目录 SQL全方位攻略&#xff1a;1.数据库介绍 SQL全方位攻略&#xff1a;2.SQL介绍 SQL全方位攻略&#xff1a;3.SQL标准 SQL全方位攻略&#xff1a;4. 标准SQL和SQL“方言” 文章目录 系列文章目录SQL “方言”大比拼&#xff1a;Oracle、MySQL、PostgreSQL限制检索行…

TCP/IP协议族

TCP/IP协议族 一系列协议组成的一个网络分层模型 分层 分层原因 网络的不稳定性 具体分层 应用层 决定了向用户提供应用服务时通信的活动&#xff0c;如HTTP、FTP&#xff08;文件传输协议&#xff09;、DNS&#xff08;域名系统&#xff09; 传输层 对上层应用层&…

【2023华为OD笔试必会25题--C语言版】《24 货币单位换算》——字符串

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…

数据结构--线段树

写在前面&#xff1a; 学习之前需要知道以下内容&#xff1a; 1. 递归 2. 二叉树 文章目录 线段树介绍用途建树修改单点修改区间修改 查询 代码实现。建树更新lazy传递查询 练习洛谷 P3372 【模板】线段树 1题目描述题解 线段树 介绍 线段树是一种二叉树&#xff0c;也可以…

css的clip-path学习

文章目录 clip-path的几个值polygon多边形circle圆形ellipse椭圆形inset 矩形round后面是四个角的度数 一个简单的应用&#xff0c;比如画一段曲线 参考博文 clip-path的几个值 自己学习后&#xff0c;先把clip-path理解为在原图上绘制轮廓&#xff0c;显示的内容是轮廓内的内…

柯里化详解

柯里化详解 介绍玩具版柯里化真正的柯里化&#xff08;面试必备&#xff09; 介绍 柯里化&#xff08;Currying&#xff09;是一种函数式编程技术&#xff0c;它将一个接受多个参数的函数转换为一系列接受单一参数的函数。柯里化的主要目的是让函数更易于复用和组合。通过柯里…

基于企业网的信息安全防护系统的设计与实现_kaic

摘 要 这篇文章提供了一种新的&#xff0c;基于“禁止一切”安全策略和VxD技术的企业网络安全保障方案&#xff0c;旨在帮助企业更好地应对外界的威胁。通过设计一套完善的企业网信息安全防护系统&#xff0c;不仅可以有效地解决企业网络中存在的问题&#xff0c;而且还可以有…

Testing and fault tolerence考试要点

文章目录 ATPGFault modelScanFunctional testMemory BISTLogic BISTboundary scanATEIddq testingFault tolerant designRisk analysis ATPG ATPG工作流程fault collapsing的原则 Fault model 有哪些fault model以及他们的工作原理 Scan Scan寄存器结构Scan Chain的连接方…