使用vite重构vue-cli的vue3项目

一、修改依赖

首先修改 package.json,修改启动方式与相应依赖
在这里插入图片描述
移除vue-cli并下载vite相关依赖,注意一些peerDependency如fast-glob需要手动下载

# 移除 vue-cli 相关依赖
npm remove @vue/cli-plugin-babel @vue/cli-plugin-eslint @vue/cli-plugin-router @vue/cli-plugin-vuex @vue/cli-service vue-cli-plugin-element-plus vue-template-compiler webpack babel-eslint# 安装 vite 及相关依赖
npm install -D vite@5 @vitejs/plugin-vue vue-tsc vite-plugin-svg-icons sass fast-glob

二、vite.config.js

vite默认支持ES语法,将原先 vue-config.js 中的所有 require 手动修改为import,根据文档转为相应格式,如 publicPath 改为 base

还需注意webpack中导入 layout/index.vue 可以简写为 import Layout from './layout',Webpack 会自动去尝试:

  • ./Chart.js
  • ./Chart.vue
  • ./Chart/index.js
  • ./Chart/index.vue

Vite默认不会识别vue文件,extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] 手动声明让其识别vue文件
在这里插入图片描述
某些js也需要采用ES导出方式
在这里插入图片描述
在这里插入图片描述

三、启动项目

1. 启动无页面

npm run dev启动项目后发现并没有页面
在这里插入图片描述

因为 vite 读的是根目录,将 public/index.html 移动到根目录下并手动引入 main.js 即可。
在这里插入图片描述
在这里插入图片描述

2. 解决webpack模版语法

npm run dev 启动项目发现报错
在这里插入图片描述
这是因为 index.html 中使用到了webpack模版语法
在这里插入图片描述

3. 解决非 ESM 风格路径报警

在这里插入图片描述
这是 Vite 在处理 element-plus 中的非 ESM 风格路径(如 lib 目录)时报的警告/错误。element-plus/lib/… 是 CJS 构建产物,Vite 默认使用的是 ESM,不再支持这种方式。

import localeEN from 'element-plus/lib/locale/lang/en'
import localeZH from 'element-plus/lib/locale/lang/zh-cn'
// 改为
import localeEN from 'element-plus/es/locale/lang/en'
import localeZH from 'element-plus/es/locale/lang/zh-cn'

4. 解决样式问题

在这里插入图片描述
这是因为 vite.config.js 中已经将其变为了全局文件,无需手动引入,会造成加载问题。
在这里插入图片描述

5. .env环境变量

在这里插入图片描述
在这里插入图片描述

这是因为 vite 不再使用 node 的环境变量加载,而是将环境变量在一个特殊的对象上暴露,这个对象即是 import.meta.env, 并且 .env 文件只有 VITE_ 前缀的变量才会被 vite 处理

6. require.context

在这里插入图片描述
在这里插入图片描述
使用 import.meta.glob 来替代 require.context,动态导入目录中的文件

import { createApp } from 'vue'
import App from '@/App.vue'
import SvgIcon from '@/components/SvgIcon/index.vue' // svg组件const app = createApp(App)// 注册为全局组件
app.component('SvgIcons', SvgIcon)// 使用 import.meta.glob 来动态导入所有 svg 文件
const svgFiles = import.meta.glob('./svg/**/*.svg')// 动态导入所有 svg 文件
Object.keys(svgFiles).forEach(key => {svgFiles[key]() // 这里执行一下,确保文件被导入
})app.mount('#app')

7. eslint

执行 npm run lint 报错
在这里插入图片描述
之前的 Vue CLI 项目使用了 babel-eslint 作为 ESLint 的解析器,而在 Vite 项目中:推荐使用 eslint-plugin-vuebabel-eslint 已废弃,官方已明确不再维护。
在这里插入图片描述
eslint-plugin-vue官方地址,官方文档地址,配置步骤如下:

下载依赖,由于原先 vue-cli 项目中使用的 eslint-v6,这里顺带升级为最新的v9,配置文件也由原先的 .eslintrc.cjs、.eslintignore 改为 扁平化配置eslint.config.js

# 安装经过验证的稳定组合
npm install --save-dev \eslint@9.6.0 \eslint-plugin-vue@9.26.0 \vue-eslint-parser@9.4.2 \@babel/preset-env@7.24.5

根据文档将 .eslintrc.cjs、.eslintignore 均写入 eslint.config.js
parser 由 babel-eslint 改为 vue-eslint-parser

在这里插入图片描述

修改 package.json 中的命令,删除 --ext,并在 eslint.config.js 中约束文件类型。

在这里插入图片描述

四、总结

特性ViteVue CLI
开发速度秒级冷启动,热更新极快(基于 ES 模块)冷启动慢,热更新慢(基于 Webpack)
打包工具使用 Rollup 进行生产构建使用 Webpack
开发服务器原生支持 ESModules,无需打包即可运行启动前需先打包(基于 Webpack DevServer)
配置方式极简配置,基于 vite.config.js较复杂,基于 vue.config.js
按需加载天生支持模块按需加载手动配置(如 babel-plugin-import)
插件生态新兴生态,兼容 Rollup 插件成熟生态,基于 Webpack 插件
构建速度构建快、体积小(使用 Rollup)构建慢(Webpack 本身性能瓶颈)
类型支持默认支持 TypeScript需要手动开启支持
体积优化默认支持 Tree-shaking、动态导入需要配置优化(如 splitChunks)

打包体积由 20.8M 缩小为 3.8M
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

uniapp|实现手机通讯录、首字母快捷导航功能、多端兼容(H5、微信小程序、APP)

基于uniapp实现带首字母快捷导航的通讯录功能,通过拼音转换库实现汉字姓名首字母提取与分类,结合uniapp的scroll-view组件与pageScrollTo API完成滚动定位交互,并引入uni-indexed-list插件优化索引栏性能。 目录 核心功能实现动态索引栏生成​联系人列表渲染​滚动定位联动性…

C#中SetProperty方法使用

SetProperty 是 MVVM(Model-View-ViewModel) 模式中用于实现 属性变更通知(INotifyPropertyChanged) 的核心方法,主要用于在属性值变化时自动更新 UI 绑定。 1. SetProperty 的基本作用 更新字段值:修改属性…

MYSQL 全量,增量备份与恢复

目录 一 数据备份的重要性 1 数据备份的重要性 2 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2. 从数据库的备份策略角度分类从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份。 3 常见的备份方法 3.1 物理冷备份 物理冷备份时需要在数据库处…

豆瓣电影Top250数据工程实践:从爬虫到智能存储的技术演进(含完整代码)

目录 引言:当豆瓣榜单遇见大数据技术 项目文档 1.1 选题背景 1.2 项目目标 2. 项目概述 2.1 系统架构设计 2.2 技术选型 2.3 项目环境搭建 2.3.1 基础环境准备 2.3.2 爬虫环境配置 2.3.3 Docker安装ES连接Kibana 安装IK插件 2.3.4 vscode依赖服务安装 3. 核心模…

深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白

真心为国内能有像华为这样的技术型公司而自豪,一步步突围技术封锁。从这篇信息,可以给软件从业者一个启示:鸿蒙生态将是一个新的机会,值得好好把握。 鸿蒙电脑正成为中国电子信息技术新坐标。 超10亿鸿蒙生态设备、2800家鸿蒙智…

【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)

字节序(Endianness)是计算机系统中多字节数据(如整数、浮点数)在内存中存储或传输时,​​字节排列顺序​​的规则。它分为两种类型:​​大端序(Big-Endian)​​和​​小端序&#xf…

六个仓库合并为一个仓库,保留master和develop分支的bat脚本

利用git subtree可以实现多个仓库合并为一个仓库,手动操作起来太麻烦了,今天花了点时间写了一个可执行的脚本,现在操作起来就方便多了。 1、本地新建setup.bat文件 2、用编辑器打开(我用的是Notepad) 3、把下面代码…

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法 描述: C20 QT6.9 VS2022 中使用QProcess::startDetached(“UI_Core.exe”, QStringList(), QString(), &UI_Manage_pid);是启动目标程序 能否同时告诉目标程序当前宿主程序的PID,在UI_CORE.EX…

神经网络是如何工作的

人工智能最核心的技术之一,就是神经网络(Neural Networks)。但很多初学者会觉得它是个黑盒:为什么神经网络能识别图片、翻译语言,甚至生成文章? 本文用图解最小代码实现的方式,带你深入理解&am…

LeetCode热题100 两数之和

目录 两数之和题目解析方法一暴力求解代码 方法二哈希代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿…

在线服务器具体是指什么?

在线服务器主要是指一种能够随时进行网络连接、管理和操作的服务器,在线服务器是通过互联网或者是本地网络,来为企业和用户提供数据存储和网络服务的,在线服务器也可以是物理服务器或者是虚拟服务器,能够根据远程访问工具进行管理…

OSPF综合性实验

实验拓扑: 第一步:进行子网划分 172.16.0.0/17 172.16.0000 00 00.00000000 -- area1 172.16.0.1/22 -- AR1--G0/0/0 172.16.0.2/22 -- AR2--G0/0/0 172.16.0.3/22 -- AR3--G0/0/0 172.16.4.1/22 -- AR1-- Lo0 172.16.8.2/22 -- AR2-- Lo0 172.16.12.3/…

WEB前端表单及表格标签综合案例

表单标签综合案例&#xff1a; 源代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

实战项目3(04)

​​​​​​目录 ​​​​​​任务场景一 【r1配置】 【sw1配置】 任务场景二 【r1配置】 【sw1配置】 【sw2配置】 任务场景一 某公司网络为了减少广播包对网络的影响&#xff0c;网络管理员对网络进行了VLAN划分&#xff0c;完成VLAN划分后&#xff0c;为了不影响VL…

tinyint(3)数据类型讲解

TINYINT(3) 是数据库中用于定义字段数据类型的一种写法&#xff0c;常见于 MySQL 等数据库系统。下面来详细了解其含义和作用&#xff1a; 数据类型本质 TINYINT 属于整数类型&#xff0c;在不同的数据库系统中&#xff0c;它所占用的存储空间和表示范围通常是固定的。以 MyS…

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…

自定义prometheus exporter实现监控阿里云RDS

# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例&#xff0c;数据库实例很多的情况下&#xff0c;不方便管理。 2. 内部有定制化监控需求&#xff0c;RDS 默认无法实现&#xff0c;…

开放原子大赛石油软件赛道参赛经验分享

亿级以上网格油藏模型三维可视化 一、赛项背景 油藏数值模拟是油气田开发中至关重要的一环。油藏数值模拟将储层与井的数学模型离散求解&#xff0c;预测地下流体、能量等的动态变化&#xff0c;广泛应用于油田产量评估、开发方案优化等。随着计算机技术特别是并行技术的发展…

学习方法讨论——正论科举精神的内核

世界不存在绝对的善&#xff0c;可以很善&#xff0c;但很难找到绝对的善&#xff0c;总带些副作用&#xff1b;世界上也不存在绝对的恶&#xff0c;可以很恶&#xff0c;但很难找到绝对的恶&#xff0c;可以尝试举例&#xff1b; 再者&#xff0c;物极必反&#xff0c;当对一个…

网络不再神秘:如何有效利用服务器网络流量探针进行监控?

目录 一、流量探针到底是个啥&#xff1f; 二、别只是“部署了”&#xff0c;关键在“用得好” 1. 做到“最小粒度”数据采集 2. 结合时间窗口&#xff0c;构建行为基线 3. 利用标签化管理&#xff0c;提升可读性 4. 把探针输出对接安全告警系统 三、那如何部署才合理&a…