electron-vite vue3离线使用monaco-editor

目录

1.搭建一个 electron-vite 项目

2.安装monaco-editor和vite-plugin-monaco-editor

3.electron.vite.config.mjs配置

4.创建 worker.js并在main.js 引入

5.创建组件 MonacoVite.vue 组件

6. App.vue中引入组件

7.运行测试


1.搭建一个 electron-vite 项目

pnpm create @quick-start/electron

参考链接:

1.Getting Started | electron-vite

2. Electron⚡️Vite | Electron⚡️Vite

2.Electron⚡️Vite

然后按照提示操作即可!

✔ Project name: … <electron-app>
✔ Select a framework: › vue
✔ Add TypeScript? … No / Yes
✔ Add Electron updater plugin? … No / Yes
✔ Enable Electron download mirror proxy? … No / YesScaffolding project in ./<electron-app>...
Done.

2.安装monaco-editor和vite-plugin-monaco-editor

pnpm install monaco-editor
pnpm i vite-plugin-monaco-editor

3.electron.vite.config.mjs配置

import monacoEditorPlugin from 'vite-plugin-monaco-editor';
plugins: [vue(),monacoEditorPlugin ]

electron.vite.config.mjs

import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import vue from '@vitejs/plugin-vue'
import monacoEditorPlugin from 'vite-plugin-monaco-editor';
export default defineConfig({main: {plugins: [externalizeDepsPlugin()]},preload: {plugins: [externalizeDepsPlugin()]},renderer: {resolve: {alias: {'@renderer': resolve('src/renderer/src')}},plugins: [vue(),monacoEditorPlugin ]}
})

4.创建 worker.js并在main.js 引入

worker.js

import * as monaco from 'monaco-editor';
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
import JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker';
import CssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker';
import HtmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker';
import TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker';self.MonacoEnvironment = {getWorker(_, label) {if (label === 'json') {return new JsonWorker();}if (label === 'css' || label === 'scss' || label === 'less') {return new CssWorker();}if (label === 'html' || label === 'handlebars' || label === 'razor') {return new HtmlWorker();}if (label === 'typescript' || label === 'javascript') {return new TsWorker();}return new EditorWorker();}
};monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);

main.js  

import './worker.js'
import './assets/main.css'import { createApp } from 'vue'
import App from './App.vue'
//引入worker.js
import './worker.js'
createApp(App).mount('#app')

5.创建组件 MonacoVite.vue 组件

<template><div :style="{height: height+'px',width: width+'px'}" ref="editorRef"></div></template><script setup>import {defineEmits, defineProps, onMounted, ref, toRaw, watch} from 'vue';import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';const emits = defineEmits(['update:modelValue']);const props = defineProps({height: {type: Number,default: 500,},width: {type: Number,default: 500,},modelValue: {type: String,default: '',},language: {type: String,default: 'json',},theme: {type: String,default: 'vs-dark',}});const editorRef = ref(null);const editorInstance = ref(null);onMounted(() => {if (editorRef.value && !editorInstance.value) {editorInstance.value = monaco.editor.create(editorRef.value, {value: props.modelValue,language: props.language,theme: props.theme,scrollBeyondLastLine: false,});editorInstance.value.onDidChangeModelContent((event) => {emits('update:modelValue', toRaw(editorInstance.value).getValue());});}});// 监听外部code变化,更新内部状态watch(() => props.modelValue, (newVal, oldVal) => {let currValue = toRaw(editorInstance.value).getValue();if (newVal!==currValue){toRaw(editorInstance.value).setValue(newVal)}}, {deep: true});</script>

6. App.vue中引入组件

import MonacoVite from './components/MonacoVite.vue'
 <monaco-vite :width="500" :height="500" v-model:="codedata" language="json"></monaco-vite>

App.vue

<script setup>
import {ref} from 'vue'
import Versions from './components/Versions.vue'
const ipcHandle = () => window.electron.ipcRenderer.send('ping')import MonacoVite from './components/MonacoVite.vue'
const codedata=ref("123")</script><template><monaco-vite :width="800" :height="800" v-model:="codedata" language="json"></monaco-vite><div class="actions"><div class="action"><a href="https://electron-vite.org/" target="_blank" rel="noreferrer">Documentation</a></div><div class="action"><a target="_blank" rel="noreferrer" @click="ipcHandle">Send IPC</a></div></div><Versions />
</template>

7.运行测试

参考链接:

1.GitHub - microsoft/monaco-editor: A browser based code editor

2.https://www.npmjs.com/package/vite-plugin-monaco-editor

3.Vue3 Vite Monaco Editor - boommanpro

4.在 vite-vue3.x 中的使用 vscode monaco-editor 方法 | NoteZ_技术博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424245.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL 点云基于高程渲染颜色

目录 一、概述 1.1原理 1.2实现步骤 1.3 应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 本文将介绍如何使用PCL库…

搬砖人如何快速找回丢失的数据?盘点4款高效电脑数据恢复工具

各位上班的朋友们&#xff0c;是不是有时候一不小心&#xff0c;就发现自己好不容易存下来的数据找不着了&#xff1f;别慌哈&#xff0c;今天我这个懂点科技的人就来给大家说说几款特别实用的能电脑数据恢复的工具&#xff0c;让你轻轻松松把那些“跑丢了”的数据给找回来&…

【C语言】(指针系列四)回调函数+qsort函数

一、回调函数 回调函数就是通过函数指针调用的函数 如果你把函数的指针作为参数传递给另外一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;被调用的函数就是回调函数。回调函数并不是一个单一的函数实现的&#xff0c;而是在某种情况下&#xff0c;编…

HighCharts图表自动化简介

什么是分析数据? 在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。 验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。 什么是HighChart? …

在 Java 中实现 Kafka Producer 的单例模式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

怎么让手机ip地址变化?介绍几种实用方法

随着网络技术的发展&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;其变动对于保护个人隐私、规避网络限制等方面具有重要意义。本文将介绍几种实用的方法&#xff0c;帮助用户实现手机IP地址的变化&#xff0c;并提醒注意事项。 一、连接不同的WiFi网络‌ 连接不同的W…

【初阶数据结构】详解树和二叉树(一) - 预备知识(我真的很想进步)

文章目录 前言1. 树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用 2. 二叉树2.1 二叉树的概念2.2 现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树概念和性质的一些习题 前言 初阶数据结构篇马上要迎来了一个新的成员&#xff0c;那就是"二叉…

Linux基础---07文件传输(网络和Win文件)

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…

stm32 W25Q数据存储

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输&#xff08;待写&#xff09;总结 前言 W25Q128 容量为128位 128/8 16 也就…

0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现

参考&#xff1a; Nginx越界读取缓存漏洞 CVE-2017-7529 | PeiQi文库 (wgpsec.org)Nginx越界读取缓存漏洞&#xff08;CVE-2017-7529&#xff09;复现分析 - qweg_focus - 博客园 (cnblogs.com) 一、漏洞描述&#xff1a; 在Nginx的反向代理配置中&#xff0c;静态文件缓存包…

国产化中间件正在侵蚀开源中间件

开源中间件的发展趋势表明&#xff0c;它们将继续在技术创新和生态建设中发挥重要作用&#xff0c;尤其是在云计算、大数据等新兴技术领域。开源中间件如Apache Kafka、RabbitMQ、ActiveMQ和RocketMQ等在市场上有着广泛的应用。它们在技术社区中得到了良好的支持&#xff0c;并…

SpringBoot 处理 @KafkaListener 消息

消息监听容器 1、KafkaMessageListenerContainer 由spring提供用于监听以及拉取消息&#xff0c;并将这些消息按指定格式转换后交给由KafkaListener注解的方法处理&#xff0c;相当于一个消费者&#xff1b; 看看其整体代码结构&#xff1a; 可以发现其入口方法为doStart(),…

Linux 访问控制列表(Access Control List)

在Linux中&#xff0c;目录或文件的权限是针对的所有者(owner)&#xff0c;所属组(group)&#xff0c;其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题&#xff0c;Linux引入了访问控制列表&#xff08;Access Cont…

Navicat 17 新特性 | 聚焦 MongoDB

随着 Navicat 17 的盛大发布&#xff0c;其一系列创新特性赢得了广大用户的热烈反响。它不仅在模型设计上实现了突破性优化&#xff0c;提升了查询与配置的效率&#xff0c;还大幅优化了用户界面的交互体验&#xff0c;原生支持国产平台与操作系统&#xff0c;同时增强 BI 能力…

JAVA毕业设计170—基于Java+Springboot+vue3+小程序的房屋租赁小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的房屋租赁小程序系统(源代码数据库)170 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、房东、管理员三种角色 1、用户&am…

Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装

音频解析 音频解码是指将压缩的音频数据转换为可以再生的PCM(脉冲编码调制)数据的过程。 FFmpeg音频解码的基本步骤如下: 初始化FFmpeg解码器(4.0版本后可省略): 调用av_register_all()初始化编解码器。 调用avcodec_register_all()注册所有编解码器。 打开输入的音频流:…

Idea springboot项目热部署

使用 spring-boot-devtools spring-boot-devtools 是 Spring Boot 提供的开发工具模块&#xff0c;它可以自动检测到代码的变化并重启应用&#xff0c;实现热部署。 配置步骤&#xff1a; 添加依赖&#xff1a; 在项目的 pom.xml 中加入 spring-boot-devtools 依赖&#xff1…

Redis(主从复制、哨兵模式、集群)概述及部署测试

目录 一、Redis 主从复制 1.1、Redis 主从复制概念 1.2、主从复制的作用 1.3、主从复制流程 1.4、搭建Redis 主从复制 二、Redis 哨兵模式 2.1、Redis 哨兵模式概念 2.2、哨兵模式原理 2.3、哨兵模式的作用 2.4、哨兵模式的结构 2.5、故障转移机制 2.6、主节点的选…

Node.js 多版本安装与切换指南

一.使用nvm的方法 1. 卸载nodejs 如果你的电脑有安装nodejs&#xff0c;需要先卸载掉&#xff1b;若没有请直接下一步。 2. 前往官网下载nvm nvm&#xff1a;一个nodejs版本管理工具&#xff01; 官网地址&#xff1a;nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm中文…

MySQL详解:数据类型、约束

MySQL 1. 数据类型1.1 数值类型1.1.1 bit 位类型1.1.2 整数数据类型1.1.3 小数类型floatdecimal 1.2 字符类型1.2.1 char1.2.2 varchar 可变长字符串1.2.3 日期和时间类型datedatetimetimestamp 1.2.4 enum1.2.5 set集合查询函数 find_in_set 2. 表的约束2.1 NULL 空属性2.2 默…