使用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')
四、总结
特性 | Vite | Vue 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
相关文章:

使用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-rout…...
Go-GJSON 组件,解锁 JSON 读取新姿势
现在的通义灵码不但全面支持 Qwen3,还支持配置自己的 MCP 工具,还没体验过的小伙伴,马上配置起来啦~ https://click.aliyun.com/m/1000403618/ 在 Go 语言开发领域,json 数据处理是极为常见的任务。Go 标准库提供了 encoding/jso…...
Java详解LeetCode 热题 100(14):LeetCode 56. 合并区间(Merge Intervals)详解
文章目录 1. 题目描述2. 理解题目3. 解法一:排序 + 一次遍历法3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景4. 解法二:双指针法4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 与解法一的比较5. 解法三:TreeMap法5.1 思路5.2 Java代码实现5.3 …...
将Docker镜像变为可执行文件?体验docker2exe带来的便捷!
在现代软件开发中,容器化技术极大地改变了应用程序部署和管理的方式。Docker,作为领先的容器化平台,已经成为开发者不可或缺的工具。然而,对于不熟悉Docker的用户来说,接触和运行Docker镜像可能会是一个复杂的过程。为了解决这一问题,docker2exe项目应运而生。它提供了一…...
ev_loop_fork函数
libev监视器介绍:libev监视器用法-CSDN博客 libev loop对象介绍:loop对象-CSDN博客 libev ev_loop_fork函数介绍:ev_loop_fork函数-CSDN博客 libev API吐血整理:https://download.csdn.net/download/qq_39466755/90794251?spm1001.2014.3…...

数据治理域——数据治理体系建设
摘要 本文主要介绍了数据治理系统的建设。数据治理对企业至关重要,其动因包括应对数据爆炸增长、提升内部管理效率、支撑复杂业务需求、加强风险防控与合规管理以及实现数字化转型战略。其核心目的是提升数据质量、统一数据标准、优化数据资产管理、支撑业务发展和…...
ES常识7:ES8.X集群允许4个 master 节点吗
在 Elasticsearch(ES)中,4 个 Master 节点的集群可以运行,但存在稳定性风险,且不符合官方推荐的最佳实践。以下从选举机制、故障容错、资源消耗三个维度详细分析: 一、4 个 Master 节点的可行性࿱…...

onGAU:简化的生成式 AI UI界面,一个非常简单的 AI 图像生成器 UI 界面,使用 Dear PyGui 和 Diffusers 构建。
一、软件介绍 文末提供程序和源码下载 onGAU:简化的生成式 AI UI界面开源程序,一个非常简单的 AI 图像生成器 UI 界面,使用 Dear PyGui 和 Diffusers 构建。 二、Installation 安装 文末下载后解压缩 Run install.py with python to setup…...

【第52节】Windows编程必学之从零手写C++调试器下篇(仿ollydbg)
目录 一、引言 二、调试器核心功能设计与实现 三、断点功能 四、高级功能 五、附加功能 六、开发环境与实现概要 七、项目展示及完整代码参考 八、总结 一、引言 在软件开发领域,调试器是开发者不可或缺的工具。它不仅能帮助定位代码中的逻辑错误࿰…...

uni-app学习笔记五--vue3插值表达式的使用
vue3快速上手导航:简介 | Vue.js 模板语法 插值表达式 最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法 (即双大括号): <span>Message: {{ msg }}</span> 双大括号标签会被替换为相应组件实例中 msg 属性的值。同…...

C++类与对象(二):六个默认构造函数(一)
在学C语言时,实现栈和队列时容易忘记初始化和销毁,就会造成内存泄漏。而在C的类中我们忘记写初始化和销毁函数时,编译器会自动生成构造函数和析构函数,对应的初始化和在对象生命周期结束时清理资源。那是什么是默认构造函数呢&…...
OpenCV CUDA 模块中在 GPU 上对图像或矩阵进行 翻转(镜像)操作的一个函数 flip()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::flip 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上对图像或矩阵进行 翻转(镜像)操作。它类似…...
基于大模型的原发性醛固酮增多症全流程预测与诊疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与方法 二、原发性醛固酮增多症概述 2.1 疾病定义与发病机制 2.2 临床表现与诊断标准 2.3 流行病学特征 三、大模型预测原理与技术 3.1 大模型简介 3.2 预测原理与算法 3.3 数据收集与预处理 四…...

从逻辑学视角探索数学在数据科学中的系统应用:一个整合框架
声明:一家之言,看个乐子就行。 图表采用了两个维度组织知识结构: 垂直维度:从上到下展示了知识的抽象到具体的演进过程,分为四个主要层级: 逻辑学基础 - 包括数理逻辑框架和证明理论数学基础结构 - 涵盖…...

Matplotlib 完全指南:从入门到精通
前言 Matplotlib 是 Python 中最基础、最强大的数据可视化库之一。无论你是数据分析师、数据科学家还是研究人员,掌握 Matplotlib 都是必不可少的技能。本文将带你从零开始学习 Matplotlib,帮助你掌握各种图表的绘制方法和高级技巧。 目录 Matplotli…...

如何有效追踪需求的实现情况
有效追踪需求实现情况,需要清晰的需求定义、高效的需求跟踪工具、持续的沟通反馈机制,其中高效的需求跟踪工具尤为关键。 使用需求跟踪工具能确保需求实现进度可视化、提高团队协作效率,并帮助识别和管理潜在风险。例如,使用专业的…...

自动驾驶技术栈——DoIP通信协议
一、DoIP协议简介 DoIP,英文全称是Diagnostic communication over Internet Protocol,是一种基于因特网的诊断通信协议。 DoIP协议基于TCP/IP等网络协议实现了车辆电子控制单元(ECU)与诊断应用程序之间的通信,常用于汽车行业的远程诊断、远…...

C++ 与 Go、Rust、C#:基于实践场景的语言特性对比
目录 编辑 一、语法特性对比 1.1 变量声明与数据类型 1.2 函数与控制流 1.3 面向对象特性 二、性能表现对比编辑 2.1 基准测试数据 在计算密集型任务(如 10⁷ 次加法运算)中: 在内存分配测试(10⁵ 次对象创建…...
Docker 中的 DNS 解析机制
在 Docker 容器化环境中,网络连接是至关重要的,而 DNS(Domain Name System,域名系统)解析则是网络通信的基础。容器需要能够解析内部服务名称以及外部域名,以便与其他容器或外部世界进行交互。理解 Docker 如何处理 DNS 请求,可以帮助我们更好地配置和排查网络问题。 D…...
数字化工厂中央控制室驾驶舱系统 API接口文档
数字化工厂中央控制室驾驶舱系统 API接口文档 本文档详细描述了数字化工厂中央控制室驾驶舱系统的API接口规范,包括中端服务提供的数据接口和算法接口。 1. 通用规范 1.1 基础URL 后端服务: http://localhost:8000中端服务数据API: http://localhost:8001中端服…...

如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例
在处理办公文件时,字体对提升用户体验至关重要。本文将逐步指导您如何在 ONLYOFFICE 协作空间、桌面应用及文档测试示例中自定义默认字体,以满足个性化需求,更好地掌控文档样式。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目,…...

设计模式之工厂模式(二):实际案例
设计模式之工厂模式(一) 在阅读Qt网络部分源码时候,发现在某处运用了工厂模式,而且编程技巧也用的好,于是就想分享出来,供大家参考,理解的不对的地方请多多指点。 以下是我整理出来的类图: 关键说明&#x…...

基于VeRL源码深度拆解字节Seed的DAPO
1. 背景与现状:从PPO到GRPO的技术演进 1.1 PPO算法的基础与局限 Proximal Policy Optimization(PPO)作为当前强化学习领域的主流算法,通过重要性采样比率剪裁机制将策略更新限制在先前策略的近端区域内,构建了稳定的…...

zst-2001 历年真题 软件工程
软件工程 - 第1题 b 软件工程 - 第2题 c 软件工程 - 第3题 c 软件工程 - 第4题 b 软件工程 - 第5题 b 软件工程 - 第6题 0.未完成:未执行未得到目标。1.已执行:输入-输出实现支持2.已管理:过程制度化,项目遵…...
WSL 安装 Debian 12 后,Linux 如何安装 redis ?
在 WSL 的 Debian 12 上安装 Redis 的步骤如下: 1. 更新系统包列表 sudo apt update && sudo apt upgrade -y2. 安装 Redis sudo apt install redis-server -y3. 启动 Redis 服务 sudo systemctl start redis4. 设置开机自启 sudo systemctl enable red…...
在Ubuntu系统下编译OpenCV 4.8源码
编译OpenCV 4.8源码可以为你提供更高的灵活性和优化性能,适合特定的需求。以下是详细的步骤,指导你在Ubuntu系统上编译和安装OpenCV 4.8。 1. 安装必要的依赖 首先,确保你的系统已经安装了所有必要的依赖项。 sudo apt update sudo apt in…...
Arduino快速入门
Arduino快速入门指南 一、硬件准备 选择开发板: 推荐使用 Arduino UNO(兼容性强,适合初学者),其他常见型号包括NANO(体积小)、Mega(接口更多)。准备基础元件:…...

基于WSL用MSVC编译ffmpeg7.1
在windows平台编译FFmpeg,网上的大部分资料都是推荐用msys2mingw进行编译。在win10平台,我们可以采用另一种方式,即wslmsvc 实现window平台的ffmpeg编译。 下面将以vs2022ubuntu22.04 为例,介绍此方法 0、前期准备 安装vs2022 &…...

java命令行打包class为jar并运行
1.创建无包名类: 2.添加依赖jackson 3.引用依赖包 4.命令编译class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 编译生成class文件如下 <...

vue注册用户使用v-model实现数据双向绑定
定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…...