Monaco Editor 集成指南:从配置到优化

1 在Umi中使用monaco-editor

和在Webpack中加在JS,CSS等一样,使用monaco-editor也需要专门的loader------monaco-editor-webpack-plugin。如果是UMI的项目,则配置方式如下:

javascript 复制代码
//config.ts

import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin';

export default defineConfig({
  //...其他配置
  chainWebpack(memo, args) {
    return memo.plugin('monaco-editor').use(MonacoWebpackPlugin, [
      {
        languages: ['yaml','json','html','javascript','typescript']
      }
    ]);
  },
})

2 自定义monaco资源地址 (重要)

monaco本身的资源包比较大,将 monaco-editor 的静态资源托管到企业内部CDN,利用CDN本身的缓存特性,提升编辑器加载速度,同时避免依赖外部CDN的网络波动。

php 复制代码
import Editor, { loader } from '@monaco-editor/react';

loader.config({
  paths: {
    // vs:'https://cdn.jsdelivr.net/npm/@monaco-editor/react@4.6.0/dist/index.min.js',
    vs: 'https://XXX/monaco-editor-X.X./min/vs',
  },
  'vs/nls': {
    availableLanguages: {
      '*': 'zh-cn',
    },
  },
}); 



3 优先使用原字符串传参 (重要)

在使用Monaco 设置JSON值时,从编辑器获取的数据格式类似

swift 复制代码
"[\n    {\n        "ts": "2016-04",\n        "value": 1000.10,\n        "name": "2016"\n    }]"

前端使用JSON解析之后,会改变部分输入数据的值,比如 1000.10 会变成 1000.0等









对于精度要求比较高的场景,就容易引发BUG,对于需要设置函数,而且不需要使用严格JSON格式(KEY双引号,结尾无逗号)的场景,可以使用函数变量

javascript 复制代码
new Function(`return ${optionStr}`)()

比如Echart的编辑器设置就是使用的这种方式





4 格式美化

JS中的JSON变量在设置初始化值时,调用Monaco Editor自身的格式化不能自动换行,结合prettier和babel 处理格式。

php 复制代码
import prettier from 'prettier/standalone';
import parserBabel from 'prettier/parser-babel';
    
    const formatData = 
        (prettier.format(JSON.stringify({
            data:"123",
            name:"测试"
        }), {
        parser: 'json',
        plugins: [parserBabel],
        tabWidth: 4,
    })) 
相关推荐
葡萄城技术团队2 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
excel3 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
Da Da 泓4 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
zxcvb1534 小时前
远程查看本地文档:一条轻量 Web 文件服务的工程化链路
前端·远程查看文档
niucloud-admin5 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
北岛贰5 小时前
啵啵音乐迎来全新升级!
前端
hkNaruto7 小时前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒7 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
Acro7 小时前
快给macOS 上的Grok Bot换一套皮肤
前端
flash俊杰7 小时前
双引擎 OCR 编排:逐页判定、视觉优先、partial 语义与三层超时
前端