历史版本差异?你可能需要知道Monaco编辑器

最近工作上需要一个功能来追踪或者说是比较数据的差异,需要做一个调用,由于之前已经使用过monaco编辑器,这个不仅可以用来实现代码的对比,也可以用来做一个数据的追踪,主要的目的就是为了实现修改前后两个数据版本的差异。

安装 Monaco

monaco-editor 是一个基于 Web 技术的代码编辑器,由 Microsoft 开发和维护。它提供了丰富的功能,包括语法高亮、智能代码补全、代码折叠、错误提示等。monaco-editor 最初是为 Visual Studio Code 编辑器开发的,但后来作为一个独立的项目开源,可以在任何 Web 应用程序中使用。

使用 npm 或 yarn 安装 monaco-editor

js 复制代码
npm install monaco-editor

这是安装的版本,需要给monaco安装对应的webpack插件,否则会出现报错

js 复制代码
"monaco-editor": "^0.28.1",
"monaco-editor-webpack-plugin": "^4.2.0",

配置自定义主题

使用defineTheme来定义一个你的主题,然后使用setTheme来设置

js 复制代码
const diffEditor = monaco.editor.create(document.getElementById('container'), {
    value: '<div></div>',
    language: 'html'//代码用的是什么格式 就要设置什么格式的language 这里用的是html
});
monaco.editor.defineTheme('myCustomTheme', {
    base: 'vs', // 基于 vs 主题
    inherit: true, // 继承基础主题的样式
    rules: [
        { token: '', background: '#000000' }, // 设置编辑器右侧预览的背景颜色
    ],
    colors: {
        'editor.background': '#eeeeee', // 设置编辑器的背景颜色
    }
});
monaco.editor.setTheme('myCustomTheme');

这里代码放的是html的代码,左边是代码的内容,右侧的滚动条可以预览整个代码

对于container,最好就设置一个外层元素给他包裹一下,声明一下高度

js 复制代码
<div style="height: 400px;">
    <div id="container" style="height: 100%"></div>
</div>

实现代码比较

如果要实现这种代码对比的方式,monaco也是可以实现的,在编辑器中这就是一个差异编辑器,不同于上面的编辑器的创建方法,差异编辑器的创建需要用到两个模型。

创建了两个模型:使用createModel来创建需要对比的文本,也就是原始模型和修改后的模型,并使用 monaco.editor.createDiffEditor 方法创建了一个差异编辑器。然后将原始模型和修改后的模型设置给差异编辑器的模型,从而显示代码的差异

js 复制代码
// 创建原始模型 
var originalModel = monaco.editor.createModel('hello world!', 'text/plain'); // 创建修改后的模型 
var modifiedModel = monaco.editor.createModel('hello monaco!', 'text/plain'); // 创建差异编辑器 
var diffEditor = monaco.editor.createDiffEditor(document.getElementById('container'));

// 设置原始和修改后的模型 
diffEditor.setModel({ original: originalModel, modified: modifiedModel });

到这里就能实现一个简单的差异编辑器

如果觉得有趣或有收获,请关注我的更新,给个喜欢和分享。您的支持是我写作的最大动力!

往期好文推荐

相关推荐
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅7 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅7 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊7 小时前
jwt介绍
前端
爱敲代码的小鱼7 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax