Vue3打包时关闭TS验证:告别TS报错困扰,轻松打包无忧

目录

1. Vue3 + TS 的强强联合与打包烦恼

2. 关闭 TS 验证:一劳永逸解决打包难题

 pnpm run build报错Search string not found: “for (const existingRoot of buildInfoVersionMap.roots) {“

 noImplicitAny 允许 any 类型

 allowJs 启用js支持

 停用 noUnusedLocals  && noUnusedParameters 参数检测

noUnusedLocals

noUnusedParameters

关闭 vue-tsc  类型检查


1. Vue3 + TS 的强强联合与打包烦恼

Vue3 与 TypeScript(TS)的组合无疑是前端开发的黄金搭档。然而,在打包 Vue3 项目时,恼人的 TS 相关报错可能会让人抓狂。这些报错通常与 TS 代码语法校验和验证有关,例如类型错误、变量未定义、属性不存在等。

2. 关闭 TS 验证:一劳永逸解决打包难题

为了彻底解决 Vue3 打包时的 TS 报错问题,最直接的方法是关闭 TS 验证。可以通过在 webpack 或 vite 的配置文件中进行设置来实现。

先来看看事件的导火索


 pnpm run build报错Search string not found: “for (const existingRoot of buildInfoVersionMap.roots) {“

今天测试环境的vue项目执行pnpm run build时报错,提示错误如下:

+ pnpm run build

> cmms-web@0.0.0 build /var/lib/jenkins/jobs/cmms-web-test/workspace
> vue-tsc && vite build


/var/lib/jenkins/jobs/cmms-web-test/workspace/node_modules/.pnpm/vue-tsc@1.8.27_typescript@5.5.3/node_modules/vue-tsc/bin/vue-tsc.js:68
            throw err;
            ^
Search string not found: "for (const existingRoot of buildInfoVersionMap.roots) {"
(Use `node --trace-uncaught ...` to show where the exception was thrown)
 ELIFECYCLE  Command failed with exit code 1.
Build step 'Execute shell' marked build as failure
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succeed?
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE

报错原因

然后百度了下和bing搜索了下都不行,还是得google,一下子就搜索到了问题原因(更具体看这个地址),顺便推荐下google镜像站,如下:

翻译下就是因为原先typescript版本由5.4版本升级到了5.5版本导致的,啥?我没升级啊,咋回事?看了下jekin构建时安装依赖时的截图,发现确实是5.5.3版本,那么原因基本就确定了,基本就是因为版本升级导致的!

解决办法

如果你是pnpm就就直接使用pnpm,这个方法对本地可能比较有效,

pnpm list

  "devDependencies": {
    "@types/node": "^20.5.1",
    "@vitejs/plugin-vue": "^4.2.3",
    "sass": "^1.66.1",
    "typescript": "^5.4.5",
    "vite": "^4.4.5",
    "vue-tsc": "^1.8.5"
  }
}

这里使用的是     "typescript": "^5.4.5" 所以自动升级了小版本号导致的

 

指定版本号

(1)指定版本:比如"classnames": "2.2.5",表示安装2.2.5的版本

(2)波浪号~+指定版本:比如 "babel-plugin-import": "~1.1.0",表示安装1.1.x的最新版本(不低于1.1.0),但是不安装1.2.x,也就是说安装时不改变大版本号和次要版本号

(1)^+指定版本:比如 "antd": "^3.1.4",,表示安装3.1.4及以上的版本,但是不安装4.0.0,也就是说安装时不改变大版本号。 

解决的这个问题之后打包就开始各种ts类型报错 然后咱们一步步修复


 noImplicitAny 允许 any 类型

在 TypeScript 中,类型注解是可选的,这意味着你可以为变量、函数参数和返回值指定类型,也可以不指定。当你不为变量指定类型时,TypeScript 编译器会尝试推断其类型。如果编译器无法推断出类型,或者你使用了没有明确类型注解的变量,那么它将默认使用 any 类型。

使用 any 类型可以带来灵活性,但也会导致 TypeScript 失去类型检查的优势,因为你的代码将不会对 any 类型的变量进行类型检查。这可能导致运行时错误,因为 TypeScript 不会检查 any 类型变量的赋值和操作是否符合预期。

noImplicitAny 选项的作用是:

  • 当设置为 true 时,如果编译器无法推断出变量的类型,或者你没有为变量指定类型,编译器将报错,而不是默认使用 any 类型。

  • 这迫使开发者为所有变量显式指定类型,从而提高代码的类型安全性和可维护性。

例如,考虑以下代码:

let x;
x = 10; // OK, TypeScript 推断 x 为 number 类型
x = "Hello"; // OK, x 现在是 string 类型

如果启用了 noImplicitAny

let x; // Error: Variable 'x' implicitly has an 'any' type.
x = 10; // OK, 需要为 x 指定类型

要在 tsconfig.json 文件中启用 noImplicitAny,你可以这样设置:

{
  "compilerOptions": {
    "noImplicitAny":false
  }
}

启用这个选项有助于提高 TypeScript 项目的类型安全性,但也意味着你需要为所有变量显式指定类型,这可能会增加一些编码工作量。 所以我们直接关闭

 allowJs 启用js支持

在 TypeScript 的 tsconfig.json 配置文件中,allowJs 是一个编译器选项,它用于控制 TypeScript 编译器是否允许将 .js 文件作为输入文件。

allowJs 设置为 true 时,TypeScript 编译器将允许你将 JavaScript 文件(.js)与 TypeScript 文件(.ts)一起编译。这意味着你可以在一个项目中同时使用 JavaScript 和 TypeScript 代码。这对于以下情况特别有用:

  1. 逐步迁移:如果你有一个现有的 JavaScript 项目,并且想要逐步迁移到 TypeScript,你可以先启用 allowJs 选项,这样你就可以在不重写整个项目的情况下开始使用 TypeScript。

  2. 混合项目:在一些项目中,你可能需要同时使用 JavaScript 和 TypeScript。例如,你可能使用了一些只能以 JavaScript 形式提供的第三方库。

  3. 工具和脚本:有时候,你可能有一些工具脚本或构建脚本,它们是用 JavaScript 编写的,而你的主要项目代码是 TypeScript。在这种情况下,你可能需要编译这些 JavaScript 文件。

要在 tsconfig.json 文件中启用 allowJs,你可以这样设置:

{
  "compilerOptions": {
    "allowJs": true
  }
}

启用 allowJs 后,你需要注意的是:

  • 类型检查:JavaScript 文件不会被 TypeScript 编译器进行类型检查,因为 JavaScript 是动态类型的。这意味着在 .js 文件中的代码不会享受到 TypeScript 提供的类型安全和智能提示。

  • 编译输出:如果你的 .js 文件中使用了 ES6 或更高版本的 JavaScript 特性,你需要确保你的构建系统或运行环境支持这些特性,或者使用相应的编译步骤将它们转换为兼容的 JavaScript 版本。

  • 模块系统:如果你的 JavaScript 文件使用了模块系统(如 CommonJS 或 ES6 模块),你需要确保 TypeScript 编译器的 module 选项与你的模块系统相匹配。

总的来说,allowJs 提供了在 TypeScript 项目中使用 JavaScript 文件的灵活性,但同时也需要你注意类型安全和兼容性问题。

 停用 noUnusedLocals  && noUnusedParameters 参数检测

在 TypeScript 的 tsconfig.json 配置文件中,noUnusedLocalsnoUnusedParameters 是两个编译器选项,它们用于控制编译器是否检查并报告未使用的局部变量和函数参数。

noUnusedLocals

  • 类型: boolean

  • 默认值: false

  • 作用: 当设置为 true 时,TypeScript 编译器会检查并报告在代码中声明但未使用的局部变量。这有助于清理代码,移除那些可能无意中添加的无用变量,从而提高代码的整洁性和可维护性。

noUnusedParameters

  • 类型: boolean

  • 默认值: false

  • 作用: 当设置为 true 时,TypeScript 编译器会检查并报告在函数或方法中声明但未使用的参数。这有助于识别和移除那些不再需要的参数,从而简化函数签名并减少潜在的错误来源。

示例配置

如果你希望启用这些选项,可以在 tsconfig.json 文件中这样设置: 我们直接禁用

{
  "compilerOptions": {
    "noUnusedLocals": false,
    "noUnusedParameters": false
  }
}

关闭 vue-tsc  类型检查

  1. "build": "vite build"

    这个命令只使用 Vite 进行构建。Vite 是一个现代的前端构建工具,它利用浏览器原生 ES 模块导入特性,提供了快速的冷启动和热更新。当你运行 npm run buildpnpm run build 时,Vite 会处理你的项目,包括编译 TypeScript(如果项目中使用了 TypeScript)、打包、优化等,最终生成用于生产环境的静态资源。

  2. "build": "vue-tsc && vite build"

    这个命令在 Vite 构建之前增加了一个步骤:vue-tscvue-tsc 是一个由 Vue 团队提供的工具,用于在构建过程中为 Vue 单文件组件(.vue 文件)提供 TypeScript 类型检查。这个命令首先运行 vue-tsc 来检查 .vue 文件中的 TypeScript 类型,确保没有类型错误。如果 .vue 文件中存在类型错误,vue-tsc 会报错并阻止构建过程,从而在构建之前捕获潜在的类型问题。

    vue-tsc 检查通过后,接着执行 vite build 命令,进行后续的构建过程。

使用 vue-tsc 的好处是:

  • 类型安全:在构建过程中确保 Vue 组件的 TypeScript 类型正确,提高代码的健壮性。

  • 早期错误发现:在开发过程中尽早发现类型错误,避免在运行时出现难以追踪的问题。

  • IDE 支持vue-tsc 可以与 IDE 集成,提供更好的类型检查和代码补全功能。

选择哪个命令取决于你的项目需求。如果你的项目中使用了 Vue 3 和 TypeScript,并且你希望在构建过程中进行类型检查,那么第二个命令可能更适合你。如果你不需要对 .vue 文件进行类型检查,或者你使用的是其他框架,那么第一个命令可能更简单直接。

所以我们 直接打包

 "build": "vite build",

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决el-table表格数据量过大导致页面卡顿问题 又名《umy-ui---虚拟表格仅渲染可视区域dom的神》

后台管理系统的某个页面需要展示多个列表 数据量过多 页面渲染dom卡顿 经调研发现两个组件 pl-table和umy-ui (也就是u-table) 最终决定使用umy-ui 它是专门基于 Vue 2.0 的桌面端组件库 流畅渲染表格万级数据 而且他是对element-ui的表格做了二次优化…

SwiftUI 是如何改变 iOS 开发游戏规则的?

SwiftUI 是 Apple 推出的现代化声明式 UI 框架,适用于 iOS、macOS、watchOS 和 tvOS 开发。 SwiftUI 与传统 UIKit(Swift 和 Objective-C) 的优劣势对比: SwiftUI 的优势 一. 声明式编程 优势: SwiftUI 使用声明式语法&#xff…

第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

时间轴: Java反射相关类图解: 反射: 1、什么是 Java 反射 参考: https://xz.aliyun.com/t/9117 Java 提供了一套反射 API ,该 API 由 Class 类与 java.lang.reflect 类库组成。 该类库包含了 Field 、 Me…

FitDiT - 腾讯联合复旦开源的轻量版高保真虚拟试衣模型 4G显存可使用 本地一键整合包下载

FiTDiT 是腾讯和复旦大学联合推出的一种利用 DiT 的新型服装感知增强技术,旨在实现高保真虚拟试衣。你只需要上传一个人像图像和一个衣物图像,就可以生成一个展示人物穿着所提供衣物的图像。与传统的基于 U-Net 的 LDM 相比,FiTDiT 能够将更多…

第32天:Web开发-PHP应用文件操作安全上传下载任意读取删除目录遍历文件包含

#知识点 1、安全开发-原生PHP-文件安全操作 2、安全开发-原生PHP-上传读取删除包含等 3、安全开发-原生PHP-代码审计文件安全 本质->任意文件读取/删除/修改/上传/下载等漏洞存在的原因->本质上是存在“可控变量”来传递参数->如果过滤不严->这些可控变量原则上可通…

Swagger学习⑰——@Link注解

介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解,用于在 OpenAPI 文档中定义链接(Link)。链接是一种在 API 响应中提供相关操作或资源引用的机制,通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物:小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"(或简称"Py")的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年,它的形象借鉴了真实的蟒蛇,但加入了一些可爱和友善的特点。小蟒蛇…

浙江安吉成新的分布式光伏发电项目应用

摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活的布局、更低的建设成本和更高…

记录一次Android Studio的下载、安装、配置

目录 一、下载和安装 Android Studio 1、搜索下载Android studio ​2、下载成功后点击安装包进行安装: 3、这里不用打勾,直接点击安装 : 4、完成安装: 5、这里点击Cancel就可以了 6、接下来 7、点击自定义安装&#xff1a…

【面试】程序员 简历

一、简历整体结构 完整简历包含基本信息、教育背景、求职意向、工作经历、职业技能、项目经历、个人优势和个人荣誉八个部分。编写时,前几部分在保证真实的基础上可适当美化;个人优势和荣誉描述要突出难点亮点且避免夸张,可写入如马拉松参赛、…

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一节内容很多,文章字数达到了史无前例的一万一,我们要来学习分支与循环结构中…

CentOS 7 下 Nginx 的详细安装与配置

1、安装方式 1.1、通过编译方式安装 下载Nginx1.16.1的安装包 https://nginx.org/download/nginx-1.16.1.tar.gz 下载后上传至/home目录下。 1.2、通过yum方式安装 这种方式安装更简单。 2、通过编译源码包安装Nginx 2.1、安装必要依赖 sudo yum -y install gcc gcc-c sudo…

ubuntu/kali安装c-jwt-cracker

1.下载安装包 可以去GitHub下载解压,我这直接在kali克隆下来了。(网络不好可能克隆不下来) git clone https://github.com/brendan-rius/c-jwt-cracker.git 2.如果下载的压缩包就需要进行解压,克隆的直接进入目录就好了。 unzi…

深入解析 Flink 与 Spark 的性能差异

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

1.1 k8s的介绍与核心对象概念

本节重点总结: k8s主要功能k8s核心对象 PodVolumeServiceDeploymentDaemonSetStatefulSetJob k8s架构 master和node节点master节点node节点 Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统,使用Go语言开发Kubernetes也叫K8S(因…

MySQL库表的操作

目录 一、库的操作 1.1库的创建 1.2字符集和校验规则 1.2.1 查看系统默认字符集以及校验规则 1.2.2 查看数据库支持的字符集 1.2.3 查看数据库支持的字符集校验规则 1.2.4 校验规则对数据库的影响 1.3操纵数据库 1.3.1显示库 1.3.2显示创建语句 1.3.3修改数据库 1.3…

详解opencv resize之INTER_LINEAR和INTER_AREA

一。先简单介绍一下resize的用法 src:输入图, dst:输出图 dsize:输出图的宽高,如果dsize不为空(即宽高都不是0),则以dsize为准进行resize。 fx, fy是放大缩小的比例,是…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题,通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索,多选功能,多选搜索功能,自定义 下拉框插件,使用这个的原因是因为 uniui uview 组件库下拉框太…

我喜欢的数学题

偏向抖机灵性质的,考察理解的,而不是比拼计算量的,可能跟现在岁数大了算不明白了多少有点关系吧。 高高手,别太重计算,给普通孩子留条路。就算将来真的理工治国,也没必要都往人形计算机方面引导。毕竟你未来…

潜力巨大但道路曲折的量子计算

近一年来,由于工作的原因参观访问了一些量子产业园,接触了量子加密计算机、量子云计算等非常炫酷的概念性产品,这与自己一直认为的“量子技术仍然处于实验室研究阶段”的基本判断与认知产生了强烈的冲突,一刹那间,心中…