Vue3 + Vite + TSX + vue3-ace-editor 踩坑

news/2024/7/10 0:53:36 标签: vue, ace-editor

前言

由于 ace-editor 官网并没有提供各个前端框架Vue,React,Angular的直接使用的适配版本, 所以本次使用的vue3-ace-editor 是个人开源者维护的版本,原生是支持 SFC 模版用的,由于我这里习惯使用 JSX 或 TSX的方式,所以遇到了两个小问题,特此记录

在 JSX / TSX 模式下,使用 v-model 绑定 value 编译报错

如下代码:

<VAceEditor 
  v-model:value={this.textContent}
  onInit={this.editorInit} 
  lang="yaml" 
  theme="chrome" 
  minLines={this.editorMinLines} 
  maxLines={this.editorMaxLines}/>

执行 npm run build 报错:

v-model:value is not assignable to type 'IntrinsicAttributes & { [x: `on${Capitalize<string>}`]: (...args: any[]) => any; lang?: string; theme?: string; readonly?: boolean; wrap?: boolean; printMargin?: number | boolean; ... 10 more ...; readonly minLines?: number; }'.

大致意思就是 VAceEditor 的必选属性 value 没有传,所以编译失败,看了一眼 VAceEditor 封装的源码,确实是要求有 value 属性的:

猜测是这个 tsx 里面的 v-model:value 不会被 VAceEditor 这个 SFC 组件识别,因为 value 属性是一个特殊的字段名,之前用过非 value 字段名的绑定都是正常的,这次 和 组件的 props 属性名重复了就编译失败了,临时用了hack的办法,解决了这个问题,因为提示缺 value 属性,那我就给你再传一个呗,虽然看着有点奇怪,但确实能正常运行,且双向数据绑定也是ok的:

<VAceEditor 
  v-model:value={this.textContent}
  value={this.textContent}
  onInit={this.editorInit} 
  lang="yaml" 
  theme="chrome" 
  minLines={this.editorMinLines} 
  maxLines={this.editorMaxLines}/>

在 JSX / TSX 模式下,两个TSX组件,同时注册了 ace/mode/sh,会导致报 ace is not define 错误

import {VAceEditor} from 'vue3-ace-editor';
import ace, {config} from 'ace-builds';
import modeJson from 'ace-builds/src-noconflict/mode-json';
import modeYaml from 'ace-builds/src-noconflict/mode-yaml';
import modeGroovy from 'ace-builds/src-noconflict/mode-groovy';
import themeChrome from 'ace-builds/src-noconflict/theme-chrome';
import modeSh from "ace-builds/src-noconflict/mode-sh";
import 'ace-builds/src-noconflict/ext-language_tools';

config.setModuleUrl("ace/mode/chrome", themeChrome);
config.setModuleUrl("ace/mode/yaml", modeYaml);
config.setModuleUrl("ace/mode/sh", modeSh); 
config.setModuleUrl("ace/mode/json", modeJson);
config.setModuleUrl("ace/theme/github", modeGroovy);
ace.require("ace/ext/language_tools");

具体原因还不清楚,移除了一个 ace/mode/sh 就正常了

总结

在使用 Vue +TS + TSX + Vite 用法来开发业务的时候,在打包时候很容易出现问题,因为打包是强校验,所以在执行 npm run dev 的时候并不一定会提示出来,所以在开发完一个组件或者一部分业务时候,可以提前 build 一次,将问题提前暴露出来,这样排查定位起来会比较好定位


http://www.niftyadmin.cn/n/5229023.html

相关文章

使用Docker安装Jenkins,解决插件安装失败,版本太低等问题

如果已经遇到插件安装部分失败&#xff0c;Jenkins版本太低&#xff0c;又要换什么清华镜像地址&#xff0c;不要犹豫&#xff0c;直接以下步骤卸载重装就好了 开始安装 yum 更新到最新 yum update到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具…

f-string字符串格式化方法

f-string f-string是一种在Python3.6版本中引入的新的字符串格式化方法。它允许在字符串中插入变量值或表达式的计算结果&#xff0c;使用一种简单的、直观的语法。 f-string的格式为f"字符串 {表达式/变量}"&#xff0c;其中大括号 {} 内可以是一个变量名、一个表…

Java —— ArrayList与顺序表

目录 1. 线性表 2. 顺序表 接口的实现 3. ArrayList简介 3.1 ArrayList介绍 3.2 ArrayList的构造方法 4. ArrayList的扩容机制 5. ArrayList的常见操作 6. ArrayList的遍历 7. 例题 8. ArrayList的具体使用 8.1 简单的洗牌算法 8.2 杨辉三角 9. ArrayList的问题及思考 1. 线性表…

支持中文,性能超GPT-4!为开发人员而生的 AI 搜索引擎

生成式AI代码开发平台Phind在官网发布了最新V7版本&#xff0c;性能方面超越GPT-4&#xff0c;运行效率提升了5倍&#xff0c;并且支持中文和16K超长上下文。 据悉&#xff0c;Phind V7是基于Phind的开源代码模型CodeLlama-34B V2&#xff0c;以及700亿个高质量代码和推理问题…

全网最牛最全面的Jmeter接口测试:jmeter_逻辑控制器_事务控制器

事务&#xff1a; 性能测试中&#xff0c;事务指的是从端到端&#xff0c;一个完整的操作过程&#xff0c;比如一次登录、一次 筛选条件查询&#xff0c;一次支付等&#xff1b;技术上讲&#xff1a;事务就是由1个或多个请求组成的 事务控制器 事务控制器类似简单控制器&…

Unity Canvas、Canvas Scaler、Graphic Raycaster、EventSystem 组件详解

文章目录 0. 参考文章1. Canvas1.1 Screen Space-Overlay —— 屏幕空间覆盖模式1.2 Screen Space-Camera —— 相机模式1.3 World Space —— 世界模式 2. Canvas Scaler&#xff1a;控制UI画布的放大缩放的比例2.1 Constant Pixer Size —— 恒定像素2.2 Scale With Screen S…

数值分析总结

数值分析总结思维导图 Docs 相关代码的使用和注释 列主元Gauss消元法 %%列主元高斯消元法 function xGauss_lzy(A,b)%A为方程组系数矩阵&#xff0c;b为方程组的右侧向量&#xff0c;x为方程组的解 [n,m]size(A);%%得到矩阵A的行和列的宽度 nblength(b);%%方程组右侧向量的长…

JUC并发编程 01——多线程基础知识

一.线程应用 异步调用 以调用方角度来讲&#xff0c;如果 需要等待结果返回&#xff0c;才能继续运行就是同步 不需要等待结果返回&#xff0c;就能继续运行就是异步 应用 比如在项目中&#xff0c;视频文件需要转换格式等操作比较费时&#xff0c;这时开一个新线程处理视…