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

news2025/7/14 23:35:01

一、修改依赖

首先修改 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')

四、总结

特性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.coloradmin.cn/o/2374474.html

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

相关文章

数据治理域——数据治理体系建设

摘要 本文主要介绍了数据治理系统的建设。数据治理对企业至关重要,其动因包括应对数据爆炸增长、提升内部管理效率、支撑复杂业务需求、加强风险防控与合规管理以及实现数字化转型战略。其核心目的是提升数据质量、统一数据标准、优化数据资产管理、支撑业务发展和…

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)

目录 一、引言 二、调试器核心功能设计与实现 三、断点功能 四、高级功能 五、附加功能 六、开发环境与实现概要 七、项目展示及完整代码参考 八、总结 一、引言 在软件开发领域,调试器是开发者不可或缺的工具。它不仅能帮助定位代码中的逻辑错误&#xff0…

uni-app学习笔记五--vue3插值表达式的使用

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

C++类与对象(二):六个默认构造函数(一)

在学C语言时&#xff0c;实现栈和队列时容易忘记初始化和销毁&#xff0c;就会造成内存泄漏。而在C的类中我们忘记写初始化和销毁函数时&#xff0c;编译器会自动生成构造函数和析构函数&#xff0c;对应的初始化和在对象生命周期结束时清理资源。那是什么是默认构造函数呢&…

从逻辑学视角探索数学在数据科学中的系统应用:一个整合框架

声明&#xff1a;一家之言&#xff0c;看个乐子就行。 图表采用了两个维度组织知识结构&#xff1a; 垂直维度&#xff1a;从上到下展示了知识的抽象到具体的演进过程&#xff0c;分为四个主要层级&#xff1a; 逻辑学基础 - 包括数理逻辑框架和证明理论数学基础结构 - 涵盖…

Matplotlib 完全指南:从入门到精通

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

如何有效追踪需求的实现情况

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

自动驾驶技术栈——DoIP通信协议

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

C++ 与 Go、Rust、C#:基于实践场景的语言特性对比

目录 ​编辑 一、语法特性对比 1.1 变量声明与数据类型 1.2 函数与控制流 1.3 面向对象特性 二、性能表现对比​编辑 2.1 基准测试数据 在计算密集型任务&#xff08;如 10⁷ 次加法运算&#xff09;中&#xff1a; 在内存分配测试&#xff08;10⁵ 次对象创建&#xf…

如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例

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

设计模式之工厂模式(二):实际案例

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

基于VeRL源码深度拆解字节Seed的DAPO

1. 背景与现状&#xff1a;从PPO到GRPO的技术演进 1.1 PPO算法的基础与局限 Proximal Policy Optimization&#xff08;PPO&#xff09;作为当前强化学习领域的主流算法&#xff0c;通过重要性采样比率剪裁机制将策略更新限制在先前策略的近端区域内&#xff0c;构建了稳定的…

zst-2001 历年真题 软件工程

软件工程 - 第1题 b 软件工程 - 第2题 c 软件工程 - 第3题 c 软件工程 - 第4题 b 软件工程 - 第5题 b 软件工程 - 第6题 0.未完成&#xff1a;未执行未得到目标。1.已执行&#xff1a;输入-输出实现支持2.已管理&#xff1a;过程制度化&#xff0c;项目遵…

基于WSL用MSVC编译ffmpeg7.1

在windows平台编译FFmpeg&#xff0c;网上的大部分资料都是推荐用msys2mingw进行编译。在win10平台&#xff0c;我们可以采用另一种方式&#xff0c;即wslmsvc 实现window平台的ffmpeg编译。 下面将以vs2022ubuntu22.04 为例&#xff0c;介绍此方法 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…

Nacos源码—8.Nacos升级gRPC分析六

大纲 7.服务端对服务实例进行健康检查 8.服务下线如何注销注册表和客户端等信息 9.事件驱动架构源码分析 一.处理ClientChangedEvent事件 也就是同步数据到集群节点&#xff1a; public class DistroClientDataProcessor extends SmartSubscriber implements DistroDataSt…

SpringBoot 自动装配原理 自定义一个 starter

目录 1、pom.xml 文件1.1、parent 模块1.1.1、资源文件1.1.1.1、resources 标签说明1.1.1.2、从 Maven 视角&#xff1a;资源处理全流程​ 1.1.2、插件 1.2、dependencies 模块 2、启动器3、主程序3.1、SpringBootApplication 注解3.2、SpringBootConfiguration 注解3.2.1、Con…

【C++进阶篇】多态

深入探索C多态&#xff1a;静态与动态绑定的奥秘 一. 多态1.1 定义1.2 多态定义及实现1.2.1 多态构成条件1.2.1.1 实现多态两个必要条件1.2.1.2 虚函数1.2.1.3 虚函数的重写/覆盖1.2.1.4 协变1.2.1.5 析构函数重写1.2.1.6 override和final关键字1.2.1.7 重载/重写/隐藏的对⽐ 1…