当前位置: 首页 > news >正文

使用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')

四、总结

特性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.xdnf.cn/news/401437.html

相关文章:

  • 基于粒子群算法的配电网重构
  • Kotlin与Qt跨平台框架深度解析:业务逻辑共享与多语言集成
  • MySQL-逻辑架构
  • python二手书交易管理系统
  • 如何调整yarn.nodemanager.vmem-pmem-ratio参数?
  • 什么是IP专线?企业数字化转型的关键网络基础设施
  • 阿里云人工智能大模型通义千问Qwen3开发部署
  • ASP.NET Core Identity框架使用指南
  • suricata增加单元测试编译失败
  • cursor 出现 unauthorized request
  • Maven私服搭建与登录全攻略
  • [redis进阶六]详解redis作为缓存分布式锁
  • 贝叶斯算法
  • 【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)
  • C#调用YOLOV8实现定位
  • PyCharm 快捷键指南
  • Android11.0 framework第三方无源码APP读写断电后数据丢失问题解决
  • 嵌入式系统:从基础到应用的全面解析
  • 【程序员AI入门:开发】12.AI Agent 革命:从聊天机器人到智能工作流的跃迁
  • postgresql主从集群一键搭建脚本分享
  • 2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)
  • 基于事件驱动和策略模式的差异化处理方案
  • TDengine 在金融领域的应用
  • 算法模型部署后_python脚本API测试指南-记录3
  • PyTorch实战(4)——卷积神经网络(Convolutional Neural Network, CNN)详解
  • SVN 中文路径访问报错(权限已正确分配)
  • Java项目层级介绍 java 层级 层次
  • Termius ssh连接服务器 vim打开的文件无法复制问题
  • Java中的​​策略模式​​和​​模板方法模式
  • 想实现一个基于MCP的pptx生成系统架构图【初版实现】