当前位置: 首页 > news >正文

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 组件

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_技术博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 剃(磨)前插齿刀设计计算开发第二步:
  • SIP Servlets学习
  • 打通最后一公里:使用CDN加速GitHub Page的访问
  • Matlab 的.m 文件批量转成py文件
  • 《机器学习by周志华》学习笔记-神经网络-02感知机与多层网络
  • 解密与推广IAB/MRC零售媒体测量指南
  • fedora silverblue
  • 408算法题leetcode--第八天
  • redis的一主二从三哨兵配置
  • 基于Java的SSM(Spring、Spring MVC、MyBatis)框架构建的远程诊断系统
  • 六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移
  • AI修手有救了?在comfyui中使用Flux模型实现局部重绘案例
  • 新的 MathWorks 硬件支持包支持从 MATLAB 和 Simulink 模型到高通 Hexagon 神经处理单元架构的自动化代码生成
  • 动手学深度学习(pytorch土堆)-05-1神经网络
  • 【C++】模拟实现vector
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Java编程思想》读书笔记-对象导论
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • bootstrap创建登录注册页面
  • ES学习笔记(12)--Symbol
  • FastReport在线报表设计器工作原理
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Mybatis初体验
  • Netty 4.1 源代码学习:线程模型
  • Python语法速览与机器学习开发环境搭建
  • Vue2.0 实现互斥
  • 闭包--闭包作用之保存(一)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 和 || 运算
  • 解决iview多表头动态更改列元素发生的错误
  • 聊一聊前端的监控
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端路由实现-history
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 深度解析利用ES6进行Promise封装总结
  • 学习HTTP相关知识笔记
  • 学习使用ExpressJS 4.0中的新Router
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Java数据解析之JSON
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #git 撤消对文件的更改
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)选择元素——(17)练习(Exercises)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (HAL库版)freeRTOS移植STMF103
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (三)uboot源码分析
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)PlayerPrefs在Windows下存到哪里去了?