vue3 vite使用 monaco-editor 报错

news2025/1/13 13:26:53

报错:Unexpected usage at EditorSimpleWorker.loadForeignModule

修改配置:

 "monaco-editor-webpack-plugin": "^4.2.0",删除不用

版本:

 "monaco-editor": "^0.28.1",

 修改如下:

 optimizeDeps: {
    include: [
      `monaco-editor/esm/vs/language/json/json.worker`,
      `monaco-editor/esm/vs/language/css/css.worker`,
      `monaco-editor/esm/vs/language/html/html.worker`,
      `monaco-editor/esm/vs/language/typescript/ts.worker`,
      `monaco-editor/esm/vs/editor/editor.worker`,
    ],
  },
  transpileDependencies: true,
  configureWebpack: {
    plugins: [],
  },

 文件中的代码

<template>
  <div
    ref="editorContainer"
    class="editor-container"
    :class="{ 'no-suggestion': !props.suggestion }"
    :style="{ height: `${props.myHeight ? props.myHeight : height + 'px'}` }"
  ></div>
</template>

<script  setup lang="ts">
import { ref, watch, onMounted, onUnmounted, toRaw } from "vue";
//引入monaco-editor
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";

const props = defineProps([
  "value",
  "myHeight",
  "suggestion",
  "lineNumbers",
  "fontSize",
  "background",
]);
const emit = defineEmits(["change"]);

const height = ref<any>(0);
const editor = ref<any>(null);
const editorContainer = ref<any>(null);

monaco.editor.defineTheme("define-vs-dark", {
  base: "vs-dark",
  inherit: true,
  rules: [
    {
      foreground: props.background ? props.background : "#2f3031",
      token: "markdown.header",
      fontStyle: "bold",
    },
  ],
  colors: {
    "editor.background": props.background ? props.background : "#2f3031",
    "editorGutter.background": props.background ? props.background : "#2f3031",
  },
});

const cssArr = ["css", "scss", "less"];
const jsonArr = ["json"];
const htmlArr = ["html", "handlebars", "razor"];
const tsArr = ["typescript", "javascript"];
const se: any = self;

onMounted(() => {
//高亮及提示
  se.MonacoEnvironment = {
    getWorker(_: any, label: any) {
      if (jsonArr.includes(label)) {
        return new jsonWorker();
      }
      if (cssArr.includes(label)) {
        return new cssWorker();
      }
      if (htmlArr.includes(label)) {
        return new htmlWorker();
      }
      if (tsArr.includes(label)) {
        return new tsWorker();
      }
      return new editorWorker();
    },
  };
  //创建
  editor.value = monaco.editor.create(editorContainer.value, {
    value: props.value,
    theme: "define-vs-dark",
    folding: false,
    // cursorStyle: "line", //光标样式
    language: "typescript",
    selectOnLineNumbers: true, //显示行号
    roundedSelection: false,
    readOnly: false, // 只读
    automaticLayout: false, //自动布局
    glyphMargin: true, //字形边缘
    useTabStops: false,
    fontSize: props.fontSize ? props.fontSize : 14, //字体大小
    quickSuggestionsDelay: 100, //代码提示延时
    contextmenu: true,
    scrollBeyondLastLine: false,
    acceptSuggestionOnEnter: props.suggestion ? "on" : "off", // 接受输入建议 "on" | "off" | "smart"
    acceptSuggestionOnCommitCharacter: props.suggestion, // 接受关于提交字符的建议
    lineNumbers: props.lineNumbers ? "on" : "off",
    minimap: {
      enabled: false, // 关闭代码缩略图
    },
  });
  // 监听内容变化
  toRaw(editor.value).onDidChangeModelContent((e: any) => {
    sendValue();
    setContainerHeight();
  });
  setContainerHeight();
  // 监听失去焦点事件
  toRaw(editor.value).onDidBlurEditorText(() => {});
});
const reciveValue = () => {
  if (!editor.value) return;
  const currentValue = toRaw(editor.value).getValue();
  if (currentValue === props.value) return;

  toRaw(editor.value).setValue(props.value);
};
const sendValue = () => {
  if (!editor.value) return;
  const content = toRaw(editor.value).getValue()
    ? toRaw(editor.value).getValue()
    : props.value;
  emit("change", content);
};

const setContainerHeight = () => {
  const lineCount = toRaw(editor.value).getModel().getLineCount();
  const lineHeight = toRaw(editor.value).getOption(
    monaco.editor.EditorOption.lineHeight
  );
  height.value = lineCount * lineHeight + monaco.editor.EditorOption.lineHeight;
};
const watchValue = watch(
  () => props.value,
  () => {
    reciveValue();
  }
);
onMounted(() => {
  sendValue();
});
onUnmounted(() => {
  editor.value?.dispose();
  watchValue();
});
</script>

<style scoped lang="less">
.editor-container {
  width: 100%;
}
.no-suggestion {
  .suggest-widget {
    display: none !important;
  }
}
.editor-scrollable .lines-content {
  width: 100% !important;
  height: 100% !important;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python“牵手”虾皮(Shopee)商品详情API接口运用场景及功能介绍,虾皮API接口申请指南

虾皮&#xff08;Shopee&#xff09;电商API接口是针对虾皮提供的电商服务平台&#xff0c;为开发人员提供了简单、可靠的技术来与虾皮电商平台进行数据交互&#xff0c;实现一系列开发、管理和营销等操作。其中包括商品详情API接口&#xff0c;通过这个API接口商家可以获取商品…

SLS日志解析配置

分隔符模式 INFO|2023-04-10T11:05:30.12808:00|X.X.X.X|ACCESS_ALLOWED|1 模式&#xff1a;分隔符模式 日志样例&#xff1a;贴文档说明中的样例&#xff0c;或者直接在SLS历史日志里找一行 分隔符&#xff1a;竖线 日志抽取内容Key用文档中说明的变量名 是否接受部分字段&am…

CMIP6中的模式比较计划、CMIP6数据下载、单点降尺度、统计方法的区域降尺度、基于WRF模式的动力降尺度及气候变化、生态、水文等典型案例

CMIP6数据被广泛应用于全球和地区的气候变化研究、极端天气和气候事件研究、气候变化影响和风险评估、气候变化的不确定性研究、气候反馈和敏感性研究以及气候政策和决策支持等多个领域。这些数据为我们理解和预测气候变化&#xff0c;评估气候变化的影响和风险&#xff0c;以及…

Docker容器与虚拟化技术:Harbor私有仓库部署与迁移

目录 一、理论 1.本地私有仓库 2.Harbor 二、实验 1.Docker搭建本地私有仓库 2.docker-compose部署及配置 3.harbor部署及配置 4.登录创建项目 5.在其他客户端上传镜像 6. harbor维护 7.移除 Harbor 服务容器同时保留镜像数据/数据库&#xff0c;并进行迁移 三、问题…

把Android手机变成电脑摄像头

一、使用 DroidCam 使用 DroidCam&#xff0c;你可以将手机作为电脑摄像头和麦克风。一则省钱&#xff0c;二则可以在紧急情况下使用&#xff0c;比如要在电脑端参加一个紧急会议&#xff0c;但电脑却没有摄像头和麦克风。 DroidCam 的安卓端分为免费的 DroidCam 版和收费的 …

服务器数据恢复-服务器RAID6硬盘故障离线的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器中有一组由6块磁盘组建的RAID6磁盘阵列。服务器作为WEB服务器使用&#xff0c;上面运行了MYSQL数据库以及存放了网站代码和其他数据文件。 服务器故障&#xff1a; 在服务器运行过程中该raid6阵列中有两块磁盘先后离线&#xff0c;但是管…

火山引擎DataLeap基于Apache Atlas自研异步消息处理框架

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 字节数据中台DataLeap的Data Catalog系统通过接收MQ中的近实时消息来同步部分元数据。Apache Atlas对于实时消息的消费处理不满足性能要求&#xff0c;内部使用Flin…

Mysql索引、事务与存储引擎 (索引)

一、索引 1、索引的概念&#xff1a; 索引就是一种帮助系统能够更加快速的查找信息的数据结构。 2.索引的作用&#xff1a; ①数据库利用各种快速定位技术&#xff0c;能够大大加快查询速度&#xff0c;这是创建索引的最主要的原因。 ②当表很大或查询涉及到多个表时&#xff0…

Linux安装软件每次靠百度,这次花了些时间,终于算是搞明白了

Linux下安装命令虽然经常使用&#xff0c;但也仅仅是会使用&#xff0c;每次再用时依然的百度 。于是就花了些时间整体的梳理了一番&#xff0c;以便于更好的理解。 1.安装流程介绍 在Linux下安装软件&#xff0c;其实也是遵循着和Windows一样的安装流程。 首先&#xff0c;…

巨人互动|Facebook海外户Facebook游戏全球发布实用策略

Facebook是全球最大的社交媒体平台之一&#xff0c;拥有庞大的用户基数和广阔的市场。对于游戏开发商而言&#xff0c;利用Facebook进行全球发布是一项重要的策略。下面小编将介绍一些实用的策略帮助开发商在Facebook上进行游戏全球发布。 巨人互动|Facebook海外户&Faceboo…

淘宝API技术解析,实现按图搜索淘宝商品

淘宝提供了开放平台接口&#xff08;API&#xff09;来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现&#xff1a; 1. 获取开放平台的访问权限&#xff1a;首先&#xff0c;您需要在淘宝开放平台创建一个应用&#xff0c;获取访问淘宝API的权限。具体的申请步骤和要求…

1.6 服务器处理客户端请求

客户端进程向服务器进程发送一段文本&#xff08;MySQL语句&#xff09;&#xff0c;服务器进程处理后再向客户端进程发送一段文本&#xff08;处理结果&#xff09;。 从图中我们可以看出&#xff0c;服务器程序处理来自客户端的查询请求大致需要经过三个部分&#xff0c;分别…

前端需要理解的 React 知识

1 框架通识 1.1 MVVM、MVC和MVP MVC、MVP 和 MVVM 是三种常见的软件架构设计模式。主要通过分离关注点的方式来组织代码结构&#xff0c;优化开发效率。 MVC将应用抽象为数据层&#xff08;Model&#xff09;、视图层&#xff08;View&#xff09;、逻辑层&#xff08;contr…

解锁Selenium的力量:不仅仅是Web测试

Selenium简介 Selenium&#xff0c;作为Web应用测试的领军者&#xff0c;已经成为了无数开发者和测试人员的首选工具。它不仅仅是一个自动化测试工具&#xff0c;更是一个强大的Web应用交互框架。 Selenium的起源与发展 Selenium的历史可以追溯到2004年&#xff0c;由Jason Hu…

二叉树、红黑树、B树、B+树

二叉树 一棵二叉树是结点的一个有限集合&#xff0c;该集合或者为空&#xff0c;或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 二叉树的特点&#xff1a; 每个结点最多有两棵子树&#xff0c;即二叉树不存在度大于2的结点。二叉树的子树有左右之分&#xf…

【算法刷题之哈希表(2)】

目录 1.leetcode-454. 四数相加 II2.leetcode-383. 赎金信&#xff08;1&#xff09;暴力解法&#xff08;2&#xff09;哈希法 3.leetcode-205. 同构字符串&#xff08;1&#xff09;哈希法&#xff08;2&#xff09;直接对比查找 4.leetcode-128. 最长连续序列5.总结 1.leetc…

抖音小程序商城开发制作源码 含多套模板+部署搭建教程

分享一个抖音小程序商城的制作源码&#xff0c;含多套模板、模块化自由DIY功能和完整的搭建部署教程。程序支持除抖音小程序商城制作外&#xff0c;还支持一键同步微信、支付宝、百度、今日头条端小程序。 抖音小程序商城的基本架构包括前端页面和后端管理平台两部分。前端页面…

【FPGA】FPGA入门 —— 基本开发流程

FPGA入门 1. FPGA入门2. FPGA开发流程3. 二选一多路器 - 快速熟悉开发环境及流程 1. FPGA入门 快速上手verilog语法状态机&#xff0c;线性序列机FPGA常见的设计方法自己写代码&#xff0c;下载代码进行使用&#xff0c;使用厂家/第三方提供的IP核常见接口设计 等等。。 学习…

白介素对NK细胞功能的影响(IL-1β、IL-12、IL-15、IL-18、IL-21)

1、促进NK细胞扩增和活化&#xff1a;IL-2/21 Soiffer RJ等自1996年起即报道IL-2低剂量持续输注和间歇给药对转移癌患者的CD56NK细胞有明显扩增效果。大部分NK细胞表面具有IL-2中亲和性受体&#xff0c;IL-2诱导NK的杀伤活性约需18&#xff5e;24小时。此外&#xff0c;IL-2还…

Docker安装Jenkins实操记录

前置条件&#xff1a; 1、安装了docker 2、安装了java&#xff08;没有安装情况下&#xff0c;可运行&#xff1a;yum install -y java-1.8.0-openjdk-devel.x86_64&#xff09; 一、拉取镜像 1、docker pull jenkins/jenkins 2、mkdir -p /usr/local/jenkins 3、chmod 777 …