将vue js语言支持添加注册到monaco editor中

将vue js语言支持添加注册到monaco editor中缩略图
本文目录
  1. 1. 前言
  2. 2. 探索
  3. 3. 实践
  4. 4. 完整效果
  5. 5. 完整代码

前言

最近在使用gitlab的web ide时发现当编写一个 vue组件时,文件的后缀名为.vue。在编辑器的右上角会显示当前的编程语言时vue,并且高亮语法或标签,格式化,折叠都表现很优秀。但是其实monaco是不支持vuejs的,作为一名前端开发者,我们有时需要在monaco编辑器中编写vue组件,所以我就利用业余时间尝试 在讲vuejs集成到monaco中。确切说vuejs并不是一个编程语言,它和html很类似,但也有很多差异,这里就不展开讲了。本文主要我是如何探索,实践将vuejs集成到monaco中的。

探索

我们先来看一下,一个vue组件在gitlab 的webide中的表现。
以下是两个简单的vue组件代码在webide中的表现。

将vue js语言支持添加注册到monaco editor中插图
将vue js语言支持添加注册到monaco editor中插图1

可以看到,无论是html的标签,属性,还是js的关键词,变量, 都能够合适地着色。不能说没有缺点但已经很优秀了。(一个缺点是 script标签无法折叠)

要实现这样的效果,一共分为两个部分,第一不是是为monaco注册一个的vue语言,并配置该语言相应的属性。第二就是设置一个比较好看的主题。本文主要讨论第一步,即为monaco注册添加vue编程语言。

确定了研究方向后,我搜索了很多资料,但找到都是如何在vue中集成monaco的文章和答案。

唯一有相关的就是这个问题 将vue js语言支持添加到monaco editor

由于多次搜索无果,这个在monaco中添加vue语言支持的问题搁置了一段时间,最近又想挑战一下。其实这个研究课题,真正的作用并不是很大,在编辑器中编写vue组件是无法直接显示,使用的。除了一些大型的web ide平台需要这种功能,个人,小企业基本不能用到。应该还有其他我不知道的用途,我所不知道的。但其实对我来说,并不是刚需,只是一个兴趣点,小的研究课题。

其实这个问题有一个最简单的解决办法,就是扒gitlab的 webide 代码。没错,就是在浩瀚的gitlab源代码找到他们是如何将vue语言注册到monaco中的,配置文件是哪些。简单却耗时。不信的同学可以先别往下看自己去找找。

由于知道了要想摘取果实所要走的路,所以我就义无反顾地踏上了征程。开始浅浅地研究gitlab的webide 相关的源码,说研究都是在夸自己,其实就是一段 ctrl + f ctrl + shift +f 。
一顿搜,一顿搜,一顿搜。

实践

说是一段搜,其实也要找对关键词,搜索的关键词 决定了你寻找的效率。
我用的关键词是,第一步 我用的是 register,因为要往monaco中添加一个编程语言,必须要用到这个方法languages.register()。看了一遍我该用关键词 registerLanguages 。 一下子就搜到了自己想要的。

其实这里搜索还牵扯到一个monaco版本的问题,因为gitlab使用monaco比较早,如果没有更新够它的版本的话,那么版本应该会很低,这种情况很容易导致 文档,api对不上。无法搜到自己想要的东西,或者即使搜到也无法直接使用。 gitlab 使用的monaco版本为"monaco-editor": "^0.25.2",

这里贴出注册语言涉及到的几个文件
app/assets/javascripts/editor/source_editor.js
使用registerLanguages 方法将自定义语言统统注册进去

app/assets/javascripts/ide/lib/languages/vue.js 定义vue编程语言高亮,标签等属性的文件

app/assets/javascripts/ide/lib/editor.js
设置主题,注册语言

app/assets/javascripts/ide/utils.js

该文件中有一个registerLanguages 方法,使用的参数就是vue.js中定义的属性。

由于我是在使用纯html来集成monaco,所以要使用vue.js 还需要稍微改造。
可以查看文末的完整代码。

其实就是去除了import export 和 替换了languages 的枚举值。

修改好 vue.js后,在调用三个函数就能将vue集成到monaco中了
核心代码为

const languageId = vueLan.id;
monaco.languages.register(vueLan);
monaco.languages.setMonarchTokensProvider(languageId, vueLan.language);
monaco.languages.setLanguageConfiguration(languageId, vueLan.conf);

完整效果

将vue js语言支持添加注册到monaco editor中插图2

完整代码

<!DOCTYPE html>
<html>

<head>
  <title>Vue 组件高亮 Hello World @CSDN拿我格子衫来 Monaco Editor</title>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>

<body>
  <h2>Hello World CSDN@拿我格子衫来 Monaco Editor</h2>

  <h2>集成vue语言 CSDN@拿我格子衫来 Monaco Editor</h2>
  <div id="container" style="width: 800px; height: 600px; border: 1px solid grey"></div>

  <script src="./monaco-editor/package/min/vs/loader.js"></script>

  <script src="./vue.js"></script>

  <script>
    require.config({ paths: { vs: './monaco-editor/package/min/vs' } });
    let editor

    require(['vs/editor/editor.main'], function () {

      const languageId = vueLan.id;
      monaco.languages.register(vueLan);
      monaco.languages.setMonarchTokensProvider(languageId, vueLan.language);
      monaco.languages.setLanguageConfiguration(languageId, vueLan.conf);

      editor = monaco.editor.create(document.getElementById('container'), {
        value: vueCom,
        language: 'vue',
      });
    });


  </script>
</body>

</html>
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Node-RED 字数 2938 字 · 阅读约 8 分钟 更新 2023-04-05 永久链接 https://www.modbus.cn/jiang-vue-js-yu-yan-zhi-chi-tian-jia-zhu-ce-dao-monaco-editor-zhong/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
相关标签
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

VIP会员专享

解锁全部Modbus技术资源

5169+工程师已加入VIP,享受无限制工具使用、专属技术文章、优先技术支持等权益

✓ 高级工具无限制使用
✓ VIP专属技术文章+视频教程
✓ 下载资源无限制
✓ 优先工单技术支持
了解VIP权益 低至¥0.3/天 | 支持微信/支付宝 | 随时取消

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注