vue项目中,在线编辑器vue-codemirror、ace、和monaco的使用及踩坑记录

29,893次阅读
没有评论

共计 8231 个字符,预计需要花费 21 分钟才能阅读完成。

由于第一次使用代码编辑器插件,之前都没接触过,花了几天时间才做出来满意的,参考了好几个大佬的文章,大家有需要可以自行查找相关文章!另外文底也献上了个别的参考文章。

一、vue-codemirror 编辑器

vue2 版本

vue2 版本不支持最新的 vue-codemirror,所以要下载固定的版本 4.0.6,并且要搭配 codemirror 使用,codemirror 也不建议使用 6 以上的版本

pnpm add codemirror@5.65.12 vue-codemirror@4.0.6

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

然后在 main.js 中全局挂载 vuecodemirror

//codemirror
import VueCodemirror from 'vue-codemirror'
import 'codemirror/lib/codemirror.css'
Vue.use(VueCodemirror)

在要展示 codemirror 的页面,导入以下文件,包括有语言文件 JavaScript,主体样式 eclipse,和代码折叠所需的文件 fold/xxx

import {codemirror} from 'vue-codemirror'
import 'codemirror/theme/eclipse.css'
import "codemirror/mode/javascript/javascript.js";
import 'codemirror/addon/fold/foldgutter.css'
import 'codemirror/addon/fold/foldcode'
import 'codemirror/addon/fold/foldgutter.js'
import 'codemirror/addon/fold/xml-fold'
import 'codemirror/addon/fold/brace-fold'
import 'codemirror/addon/fold/indent-fold'
import "codemirror/addon/hint/javascript-hint.js";
import "codemirror/addon/selection/active-line.js"

需要更改语言或者主体样式的,可以再 node_modules 里面找到相应文件 import 导入使用即可

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

添加配置项,这里存在一个 bug 就是自动补全括号无法实现,有看到的友友成功实现的话,可以评论区踢一下我

data () {
    return {
      curCode: '',
      cmOptions: {
        value: this.curCode,
        autorefresh: true,
        tabSize: 4, //tab 空格宽度
        mode: 'text/javascript',
        line: true,
        viewportMargin: Infinity, // 处理高度自适应时搭配使用
        highlightDifferences: true,
        spellcheck: true,
        autofocus: true,
        indentWithTab: true,
        smartIndent: true,
        styleActiveLine: true, // 设置光标所在行高亮
        showCursorWhenSelecting: true,
        lineNumbers: true, // 显示行号
        // matchBrackets: true, // 自动补全括号
        // autoCloseBrackets: true,
        foldGutter: true, // 代码折叠
        gutters: ["CodeMirror-linenumbers", 'CodeMirror-foldgutter'], 
        theme: "eclipse",
      },
      
    }
  },

最后就是使用了,大家也可以自行设置需要的样式

附上全部源码


 

 

效果图如下:

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

vue3 版本

需要下载最新版本的 vue-codemirror 和 codemirror

"vue-codemirror": "^6.1.1",

"codemirror": "^6.0.1",

紧接着下载语言包和主题包

# CodeMirror languages...
pnpm add @codemirror/lang-html
pnpm add @codemirror/lang-json
pnpm add @codemirror/lang-javascript

# CodeMirror themes...
pnpm add @codemirror/theme-one-dark

页面中使用的全部代码



在 main.js 全局中挂载并设置配置项

import {basicSetup} from 'codemirror'
import VueCodemirror from 'vue-codemirror'

const app = createApp()

app.use(VueCodemirror, {
  // optional default global options
  autofocus: true,
  disabled: false,
  indentWithTab: true,
  tabSize: 2,
  placeholder: 'Code goes here...',
  extensions: [basicSetup]
  // ...
})

想要白色背景的 codemirror,只要去掉 oneDark 主题就可以了,导入这个主题样式就是黑色背景

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

效果图如下:

还发现一个 bug 就是,在编辑状态的时候会自动添加一层虚线框,找了好久也没发现有设置样式,最后发现 overflow:hidden 可以隐藏掉虚线框,真是被自己蠢到了~

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

二、aceEditor 编辑器

下载:

pnpm add ace-builds

代码:参考的一个大佬的,但是文章被关掉了,大家可以自己去找找







效果图如下:

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

三、monaco 编辑器

这个插件和前面两种略有不同,右边会有一个小的回显,可以点击、拖动,类似 vscode

下载:这两个插件有版本对应要求,可以自行去查询

"monaco-editor": "^0.31.0",

"monaco-editor-webpack-plugin": "^7.1.0",

在 vue.config.js 中引入 monaco-editor-webpack-plugin,然后添加配置项

const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
module.exports = defineConfig({
  transpileDependencies: true,
  configureWebpack: {
    plugins: [new MonacoWebpackPlugin(),
    ],
  }
})

代码:

这里使用了自定义语言,如果有需要使用官方语言如 javascript、python 等,把自定义语言开始到结束的部分去掉,然后将 language 语言支持换成 javascript 就可以啦。



效果图如下:

vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

参考的大佬文章:

https://github.com/surmon-china/vue-codemirror

https://blog.csdn.net/weixin_43977534/article/details/123822431

https://www.cnblogs.com/wangjiahui/p/15524189.html

好啦,本人有点懒,文章写得可能还不够详细。

原文地址: vue 项目中,在线编辑器 vue-codemirror、ace、和 monaco 的使用及踩坑记录

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-10发表,共计8231字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)