搜尋
首頁web前端Vue.js一文詳解項目中怎麼根據vue版本進行差異化處理

怎麼根據版本進行差異化處理?以下這篇文章為大家介紹一下根據專案裡的vue版本進行差異化處理的方法,希望對大家有幫助!

一文詳解項目中怎麼根據vue版本進行差異化處理

最近在初始化搭建一個專案時,遇到了一個控制台報錯問題,lib_exports.getCurrentInstance is not a function#,在排查這個問題的過程中學到了一些知識:vue有許多版本,如2.6.x2.73.x,不同的vue版本則有使用差異,而不同的專案裡會用到不同的vue版本,假設有一個公共工具需要提供給不同的專案使用,那麼工具要如何根據不同專案裡的vue版本進行差異化處理呢?可以自己先想如何實現,然後帶著問題思考繼續閱讀。 【相關推薦:vuejs影片教學web前端開發

一文詳解項目中怎麼根據vue版本進行差異化處理

初步檢查

從報錯截圖中可以看到,直接原因是vueuseuseVModel方法中呼叫了getCurrentInstance方法所導致的控制台報錯。從vueuse原始碼裡就能看到vueuse是從vue-demi導入了getCurrentInstance方法。

接著看vue-demi的原始碼,如下圖,發現不對啊,我這專案用的vue版本是vue2,為什麼程式碼裡的isVue = true ?而且getCurrentInstance是vue2.7、vue3才內建的,vue2.7之前只能透過@vue/composition-api去使用getCurrentInstance

一文詳解項目中怎麼根據vue版本進行差異化處理

vue-demi原理

#vue-demi是同時支持為vue2.x、vue3.x編寫工具的工具庫,vueuse就是利用這個函式庫來抹平vue2.6.x、vue2.7、vue3.x之間的一些差異。

查看vue-demipackage.jsonscripts部分,可以看到它配置了postinstallnpm script鉤子,postinstall鉤子會在你執行pnpm install指令完成之後執行鉤子。

一文詳解項目中怎麼根據vue版本進行差異化處理

我們接著看node_modules/vue-demi/scripts/postinstall.js做了些什麼,它首先會去嘗試載入vue(require('vue'))。這裡要注意一下,如果你在vite或webpack中配置了vue別名,例如{ find: /^vue$/, replacement: '@xf/vue' },,對腳本這裡是不生效的,因為腳本是在安裝依賴後立即執行的,這個時機還沒啟動專案呢,跟vite沒有關聯。

嘗試載入vue之後,就判斷條件執行switchVersion方法。

一文詳解項目中怎麼根據vue版本進行差異化處理

switchVersion方法主要做的事情根據傳入的版本號參數,拷貝不同的配置內容,替換到目標檔案中。

一文詳解項目中怎麼根據vue版本進行差異化處理

如果是vue2.5、vue2.6,那麼它拷貝的是下面的原始碼內容:

一文詳解項目中怎麼根據vue版本進行差異化處理

如果是vue3,那麼它拷貝的是下面的原始碼內容:

一文詳解項目中怎麼根據vue版本進行差異化處理

#vue-demi實作針對不同vue版本進行差異化處理的原理就是這樣子。

根本原因和解決方案

回到專案裡的控制台報錯問題來,這裡是因為vue-demi識別不到項目裡的vue,因為專案裡安裝的是魔改vue原始碼之後的@xf/vue,沒有pnpm add vue。識別不到,vue-demi就使用了預設配置(預設配置是vue3配置)。

程式碼執行時我們用的vue是vue2.5.X,嘗試import { getCurrentInstance } from 'vue'一定是會報錯的。

解決方案就是vue-demi提供了手動切換vue版本配置的命令,我們給專案配置prepare的npm腳本:npx vue-demi-switch 2,配置好之後,每次安裝專案依賴時都會執行,手動切換到vue2配置。

(學習影片分享:vuejs入門教學程式設計基礎影片

以上是一文詳解項目中怎麼根據vue版本進行差異化處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Vuejs的缺點是什麼?Vuejs的缺點是什麼?May 05, 2025 am 12:06 AM

Vue.js的主要缺點包括:1.生態系統相對較新,第三方庫和工具不如其他框架豐富;2.學習曲線在復雜功能上變得陡峭;3.社區支持與資源不如React和Angular廣泛;4.大型應用中可能遇到性能問題;5.版本升級與兼容性挑戰較大。

Netflix:揭開其前端框架Netflix:揭開其前端框架May 04, 2025 am 12:16 AM

Netflix使用React作為其前端框架。 1.React的組件化開發和虛擬DOM機制提高了性能和開發效率。 2.使用Webpack和Babel優化代碼構建和部署。 3.採用代碼分割、服務端渲染和緩存策略進行性能優化。

vue.js的前端開發:優勢和技術vue.js的前端開發:優勢和技術May 03, 2025 am 12:02 AM

Vue.js受歡迎的原因包括簡單易學、靈活性高和高效性能。 1)其漸進式框架設計適合初學者逐步學習。 2)組件化開發提高了代碼可維護性和團隊協作效率。 3)響應式系統和虛擬DOM提升了渲染性能。

vue.js vs.反應:易於使用和學習曲線vue.js vs.反應:易於使用和學習曲線May 02, 2025 am 12:13 AM

Vue.js更易用且學習曲線較平緩,適合初學者;React學習曲線較陡峭,但靈活性強,適合有經驗的開發者。 1.Vue.js通過簡單的數據綁定和漸進式設計易於上手。 2.React需要理解虛擬DOM和JSX,但提供更高的靈活性和性能優勢。

Vue.js vs. React:哪個框架適合您?Vue.js vs. React:哪個框架適合您?May 01, 2025 am 12:21 AM

Vue.js適合快速開發和小型項目,而React更適合大型和復雜的項目。 1.Vue.js簡單易學,適用於快速開發和小型項目。 2.React功能強大,適合大型和復雜的項目。 3.Vue.js的漸進式特性適合逐步引入功能。 4.React的組件化和虛擬DOM在處理複雜UI和數據密集型應用時表現出色。

VUE.JS與React:JavaScript框架的比較分析VUE.JS與React:JavaScript框架的比較分析Apr 30, 2025 am 12:10 AM

Vue.js和React各有優缺點,選擇時需綜合考慮團隊技能、項目規模和性能需求。 1)Vue.js適合快速開發和小型項目,學習曲線低,但深層嵌套對象可能導致性能問題。 2)React適用於大型和復雜應用,生態系統豐富,但頻繁更新可能導致性能瓶頸。

vue.js vs.反應:用例和應用程序vue.js vs.反應:用例和應用程序Apr 29, 2025 am 12:36 AM

Vue.js適合小型到中型項目,React適合大型項目和復雜應用場景。 1)Vue.js易於上手,適用於快速原型開發和小型應用。 2)React在處理複雜狀態管理和性能優化方面更有優勢,適合大型項目。

VUE.JS與React:比較性能和效率VUE.JS與React:比較性能和效率Apr 28, 2025 am 12:12 AM

Vue.js和React各有優勢:Vue.js適用於小型應用和快速開發,React適合大型應用和復雜狀態管理。 1.Vue.js通過響應式系統實現自動更新,適用於小型應用。 2.React使用虛擬DOM和diff算法,適合大型和復雜應用。選擇框架時需考慮項目需求和團隊技術棧。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!