前提
笔者一直在进行低代码平台的相关开发工作。前些日子接到了,组件的事件逻辑使用代码编辑器进行编写的需求。于是在网上进行了相关编辑器的调研后,最后选择了 monaco editor
。经过一段时间的摸索开发,目前基于低代码平台的代码编辑器已上线使用。这里简单分享下关于 monaco editor
的一些使用经验。
安装 & 配置
相关安装&配置的教程能在网上搜的到,这里就不展开了。简单说一下笔者遇到的坑。
笔者是在 vite
项目里使用 monaco editor
。按照网上的教程,引进 monaco editor
的相关 worker
后,能正常使用编辑器。但该项目部署发布成 npm
包后,由 webpack 相关的项目引入后就报错了。主要原因是 webpack 和 vite 对于代码处理机制的是不同的。通过调整相关 worker
的引入方式后,解决了这个问题。
umi
3.x 项目用 npm
包的形式提供 monaco editor
编辑器,在 4.x 的应用项目里使用。要区分使用 monaco editor
与 monaco-editor-webpack-plugin
的版本。
umi
3.x 的项目无法n使用高版本 monaco editor
。
高级功能
代码编辑器是基于低代码平台建设的,所以具有低代码平台的特色。
addExtraLib——typescript 类型提示
通过 addExtraLib
可以添加 ts
类型声明,包括自定义的类型声明。当要注意的是,需要使用 typescript
language
。
registerCompletionItemProvider——代码补全
代码补全即输入字符后,根据上下文进行代码提示。
通常的做法是通过 AST
去分析代码后,进行相对应的模式匹配,但低代码平台对这块需求比较低,所以笔者的实现方案就相对比较简单了,根据输入的字符去匹配当前行这个字符前的内容,如果匹配到了,则进行相对应的代码提示。
registerInlayHintsProvider——内联提示
思路是通过 AST
分析代码,得到相对应的 tokens
,再计算出相对应需要提示的 token
的 position
即可。
registerEditorOpener——快捷跳转
低代码平台的代码编辑器会支持导入第三方的代码片段,所以需要在编辑器上进行相对应的跳转提示。网上查了一些资料后,最终选择使用 registerEditorOpener
。再搭配 addOverlayWidget
,可以在控件里展示第三方代码。
总结
目前使用的 monaco editor
版本为 0.50.0,后续有新增的功能也会补充进来。