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

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

将vue js语言支持添加Register到monaco editor中缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 前言
  2. 2. 探索
  3. 3. 实践
  4. 4. 完整效果
  5. 5. 完整代码

前言

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

探索

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

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

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

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

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

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

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

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

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

实践

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

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

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

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

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

app/assets/javascripts/ide/utils.js

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

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

其实就是去除了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语言支持添加Register到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>
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Node-RED 字数 2938 字 · 阅读约 8 分钟 更新 2023-04-05 永久链接 https://www.modbus.cn/11931.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

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