搜尋
首頁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刪除
总结分享几个 VueUse 最佳组合,快来收藏使用吧!总结分享几个 VueUse 最佳组合,快来收藏使用吧!Jul 20, 2022 pm 08:40 PM

VueUse 是 Anthony Fu 的一个开源项目,它为 Vue 开发人员提供了大量适用于 Vue 2 和 Vue 3 的基本 Composition API 实用程序函数。本篇文章就来给大家分享几个我常用的几个 VueUse 最佳组合,希望对大家有所帮助!

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

聊聊Vue3+qrcodejs如何生成二维码并添加文字描述聊聊Vue3+qrcodejs如何生成二维码并添加文字描述Aug 02, 2022 pm 09:19 PM

Vue3如何更好地使用qrcodejs生成二维码并添加文字描述?下面本篇文章给大家介绍一下Vue3+qrcodejs生成二维码并添加文字描述,希望对大家有所帮助。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

如何使用VueRouter4.x?快速上手指南如何使用VueRouter4.x?快速上手指南Jul 13, 2022 pm 08:11 PM

如何使用VueRouter4.x?下面本篇文章就来给大家分享快速上手教程,介绍一下10分钟快速上手VueRouter4.x的方法,希望对大家有所帮助!

Github 上 8 个不可错过的 Vue 项目,快来收藏!!Github 上 8 个不可错过的 Vue 项目,快来收藏!!Jun 17, 2022 am 10:37 AM

本篇文章给大家整理分享8个GitHub上很棒的的 Vue 项目,都是非常棒的项目,希望当中有您想要收藏的那一个。

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境