💍使用 Monaco 编辑器的一些总结
00 分钟
2024-3-25
2024-3-26
type
status
date
slug
summary
tags
category
icon
password
Edited
Mar 26, 2024 04:53 PM
Created
Mar 25, 2024 01:04 PM
最近因为需要实现一个在线代码的需求,所以研究了相关的内容,其中最主要的就是编辑器相关的内容

使用

对于 monaco 编辑器的选择,我使用了 @monaco-editor/react
简单的对齐进行了封装使用

本地使用

在使用 @monaco-editor/react 库,会通过CDN去加载编辑器的资源
notion image
notion image
但有时候,我们所需要的环境,并不能直接去访问外网,故我们需要将这些资源改变成本地加载 首先我们需要一个公共位置去存放这些资源,如 vite 的 public 文件夹等等 我们需要把 monaco-editor 库下载下来,主要是需要 min/vs 内容,提供给编辑器
其实还有另一种方式,是安装 monaco-editor 库,并引入即可,但之前测试的时候是有问题的,包括 webpack 等等,不太稳定,所以没有选择这种方式
通过这种方式,就可以避免编辑器去加载远程资源了

类型提示

在在线代码里,我们还需要自定义一些专属的东西,如全局上下文等内容

通过 Suggestion 提供类型提示

Monaco Editor (microsoft.github.io)
基本的操作方法可以查看一下官网的案例 主要就是通过 monaco.languages.registerCompletionItemProvider 方法去注册,然后返回规定格式的 suggestion 即可,最后再选择一个触发方式,即 triggerCharacters
上面代码实现的就是按下 . 时触发提示,并提示出 test 方法
notion image
接下来,我们来根据对象结果信息,动态的去触发提示,并封装几个方法
使用
效果如下
notion image
但后面发现,这种方式只对对象有效,而且无法去判别方法和属性等等,而且实现起来很麻烦,所以就有了下面这种方式了

通过 Typescript 提供类型提示

这种方式的话,只需要通过 typescriptdeclare 去声明类型即可,方便很多
还是上面那个例子,现在换一种实现方式
首先先定义所需要的类型声明
注意,使用的时候要变为字符串形式,传入给 monaco 编辑器
然后,在 monaco 编辑器中引入该类型提示即可
notion image

参考链接

  1. MonacoEditor 对象代码提示 - 知乎 (zhihu.com)
  1. TypeScript 为 monaco 编辑器提供类型提示|极客教程 (geek-docs.com)
  1. Monaco Editor (microsoft.github.io)
上一篇
人生第一辆公路车 — 来自大佬的馈赠
下一篇
日常摄影 —— 2024.03.07

评论
Loading...