將 Vue 2 項目升級到 Vue 3 的過程中,需要重點關注以下幾個難點和關鍵點:
建議小項目直接用vue3重寫更快,bug更少
文章目錄
- 1. **Composition API 的學習與應用**
- 2. **全局 API 的變更**
- 3. **模板語法的兼容性變化**
- 4. **組件選項和生命周期的變化**
- 5. **插件和第三方庫的兼容性**
- 6. **構建工具與依賴項的升級**
- 7. **響應式系統的底層變化**
- 8. **測試與調試遷移**
- 9. **性能優化和打包體積**
1. Composition API 的學習與應用
- Vue 3 引入了 Composition API,與 Vue 2 的 Options API 風格截然不同。
- 難點在于其不僅僅是語法變化,而是一種全新的組織邏輯和代碼復用方式。
- 開發者需熟悉
setup()
、ref
、reactive
、watch
、computed
等 API 的使用。
2. 全局 API 的變更
- Vue 3 中部分 Vue 2 的全局 API 被棄用或更改,例如:
Vue.extend
現在僅用于定義組件。Vue.nextTick()
現在為nextTick()
(需從vue
模塊導入)。Vue.set
已被棄用,因為響應式系統已基于 Proxy/Reflect 實現。
3. 模板語法的兼容性變化
- 自定義指令的鉤子函數命名變化(如
bind
→beforeMount
)。 - 渲染函數和 JSX 的變化,例如組件不再自動注入
h
(createElement
)。 - 模板中不再支持非-prop 的 attribute 自動綁定到根元素。
4. 組件選項和生命周期的變化
- 生命周期鉤子命名變化(如
beforeCreate
→beforeUnmount
)。 destroyed
→unmounted
,beforeDestroy
→beforeUnmount
。- 不再支持異步組件的
resolve
和reject
回調寫法。
5. 插件和第三方庫的兼容性
- 很多 Vue 2 插件尚未完全支持 Vue 3,可能需要尋找替代方案或等待更新。
- 如
element-ui
需要升級為支持 Vue 3 的element-plus
。 vue-router
、vuex
也需要使用 Vue 3 兼容版本(如vue-router@4
、vuex@4
)。
6. 構建工具與依賴項的升級
- 構建工具如 Webpack/Vite 配置可能需要調整。
- 需要更新項目依賴項版本,確保兼容 Vue 3。
- 刪除 Vue 2 的編譯依賴,替換為 Vue 3 的相關依賴。
7. 響應式系統的底層變化
- Vue 3 使用
Proxy
替代Object.defineProperty
,因此某些 Vue 2 的響應式寫法可能不再適用。 - 如直接索引修改數組或修改對象長度,不會觸發更新。
8. 測試與調試遷移
- 單元測試框架(如 Vue Test Utils)需升級為 Vue 3 兼容版本。
- 測試用例可能需要重寫以適配新的 API 和生命周期。
9. 性能優化和打包體積
- Vue 3 默認使用
createApp
,按需引入組件可顯著減少打包體積。 - 需重新評估項目的性能瓶頸并優化。
建議:
- 使用 Vue 3 的官方遷移指南 和 Vue 2 到 Vue 3 遷移插件 輔助升級。
- 分階段進行遷移,先升級基礎依賴和構建配置,再逐步重寫組件邏輯。