vue3使用monaco编辑器(VSCode网页版)

vue3使用monaco编辑器(VSCode网页版)

文章说明

一直在找网页版的编辑器,网页版的VSCode功能很强大,这个monaco就是VSCode样式的编辑器,功能很强大,可以直接使用;它的版本有变更,导致可能vue3使用会报一些小错误,我这里书写一个示例,来简单使用该组件,主要解决 babel.cosfig.js 和 vue.config.js 内缺少配置导致的报错

参考文章

Vue3 集成Monaco Editor编辑器

使用的demo代码是从这里复制过来的,不同的是,这里稍微补充了一下vue3相关的配置,不然会运行报错
Vue3中使用Monaco Editor代码编辑器

这篇文章中提到了 vue.config.js 的配置
vue报错之" Static class blocks are not enabled. Please add `@babel/plugin-transform-class-static-block"

最后一个 babel.config.js 中需要添加的配置,在这篇文章中找到了

核心代码

依赖安装

xml 复制代码
  "dependencies": {
    "core-js": "^3.8.3",
    "monaco-editor": "^0.52.0",
    "monaco-editor-webpack-plugin": "^7.1.0",
    "vue": "^3.2.13"
  },

vue.config.js

javascript 复制代码
const {defineConfig} = require('@vue/cli-service')
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')

module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,
    publicPath: './',
    configureWebpack: {
        plugins: [
            new MonacoWebpackPlugin()
        ]
    }
})

babel.config.js

javascript 复制代码
module.exports = {
    presets: [
        '@vue/cli-plugin-babel/preset'
    ],
    plugins: ["@babel/plugin-transform-private-methods", "@babel/plugin-transform-class-static-block"],
}

组件源码

html 复制代码
<script setup>
import * as monaco from 'monaco-editor';
import {onMounted, onUnmounted, ref} from 'vue'

const editorContainer = ref();
const editor = ref();

onMounted(() => {
  if (editorContainer.value) {
    editor.value = monaco.editor.create(editorContainer.value, {
      value: "",
      language: 'javascript',
      theme: 'vs-dark',
      codeLens: true,
      folding: true,
      snippetSuggestions: 'inline',
      tabCompletion: 'on',
      foldingStrategy: 'auto',
      smoothScrolling: true,
    });

    editor.value.onDidChangeModelContent(() => {
      console.log('编辑器内容变更')
    })
  }
});

onUnmounted(() => {
  if (editor.value) {
    editor.value.dispose();
  }
});
</script>

<template>
  <div ref="editorContainer" class="container"></div>
</template>

<style scoped>
.container {
  width: 100%;
  height: 100%;
}
</style>

App.vue

html 复制代码
<script setup>
import Editor from "@/Editor.vue";
</script>

<template>
  <div style="width: 100vw; height: 100vh">
    <Editor/>
  </div>
</template>

<style>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
</style>

效果展示

编辑JavaScript代码

实践说明

在运行过程中会提示这个文件大小超过500KB,不过不影响运行

源码下载

monaco使用demo

相关推荐
hui函数7 小时前
如何解决 PyCharm 控制台 pip install 报错 UnicodeDecodeError/GBK 路径编码问题
ide·pycharm·pip
zhaqonianzhu8 小时前
【vsc】cpptools占用内存过大
vscode
智慧地球(AI·Earth)13 小时前
Codex配置问题解析:wire_api格式不匹配导致的“Reconnecting...”循环
开发语言·人工智能·vscode·codex·claude code
「QT(C++)开发工程师」14 小时前
我的 TRAE 编程体验-简介篇
ide·trae
AI大佬的小弟15 小时前
pycharm专业版有哪些功能?
ide·pycharm·pycharm专业版的功能·代码写作软件推荐
从此不归路16 小时前
FPGA 结构与 CAD 设计(第3章)上
ide·fpga开发
markvivv16 小时前
在 Kylin Linux Advanced Server for Kunpeng V10 上构建 VSCode 1.106
linux·vscode·kylin
hui函数16 小时前
如何解决 PyCharm 控制台 pip install 报错 BadZipFile: File is not a zip file问题
ide·pycharm·pip
zhangfeng113317 小时前
Kiro python环境的设置 中文语言包设置,通用vscode ,因为kiro是vscode基础上做的
开发语言·vscode·python
微醺的老虎18 小时前
【工具】vscode格式化json文件
ide·vscode·编辑器