使用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.pswp.cn/diannao/82781.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82781.shtml
英文地址,請注明出處:http://en.pswp.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…