匯總
# 升級uniapp項目dcloudio整體依賴,建議執行多次
# 會順帶自動更新/升級vue的版本
npx @dcloudio/uvm@latest alpha# 檢查 pinia 的最新版本
npm view pinia version# 更新項目 pinia 到最新版本
npm update pinia# 更新項目 pinia 到特定的版本
# 首先,修改項目packages.json里面對應依賴的版本,
# 然后運行:
npm install
前提
node -v 以前是v14.21.3 現在是v22.14.0
舊項目版本
"@dcloudio/uni-app": "^3.0.0-alpha-3050520220824001"
"vue": "^3.2.37"
"vite": "^2.9.14"
"pinia": "^2.0.20"
升級前的報錯
1)HBuilderX預覽項目后,無報錯,白屏,顯示運行地址
> Local: http://localhost:3000/xxx
將http://localhost:3000/xxx運行在右邊的Web瀏覽器中,運行,開始報錯(下一個報錯...)
2)報錯 vite.createFilter is not a function
原因:vite版本與安裝的依賴版本不匹配,升級vue版本或者降低vite版本
解決:vite.createFilter is not a function 問題解決-CSDN博客
(我們在執行“npx @dcloudio/uvm@latest alpha”之后就解決了)
升級后的報錯
3)升級vite到v5后,
報錯:Uncaught TypeError: (intermediate value).globEager is not a function,
出處:const modules = import.meta.globEager('./modules/**/*.ts')
解決辦法:vite3、4升級vite5后 import.meta.globEager方法不存在及ts異常問題解決?
解決辦法:https://blog.csdn.net/tekin_cn/article/details/144070214
4)報錯vue.runtime.esm.js? [sm]:1480 Error: [🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"?
?...關鍵詞!before calling "app.use(pinia)" > 要么沒call,要么晚call...
報錯:
解決辦法:
1.先看看各種store有沒有正確的定義??
import { defineStore } from 'pinia'
export const useUserStore = defineStore({})
2.再看看各種store有沒有正確的引用 + useXXStore()實例化?
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
3.確實沒問題,按照pinia官方手冊,完整對比下官網的所有步驟!(當前pinia版本)
手冊:https://pinia.vuejs.org/zh/getting-started.html
發現問題:main.js [main.ts] 未正確引入pinia。 >> 問題解決
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const pinia = createPinia()
const app = createApp(App)app.use(pinia)
app.mount('#app')
?
5)報錯:$u未定義...
分析:$u是uviewUI (或者vk-uview-ui)的內置函數組合,掛載到uni全局對象中。
原因:uview未掛載成功,官網方法:https://uviewui.com/components/install.html?,
但本項目使用\src\plugins\index.ts統一掛載,另有pinia、vconsole等。
其中,淺談import.meta.glob和import.meta.globEager的區別?
既然isFunction通不過,那就,直接run! (...難不成isObject??)
import { App } from 'vue'
const modules = import.meta.glob('./modules/**/*.ts', {eager: true, import: 'default'
})export default {install: (app: App) => {for (const module of Object.values(modules)) {module(app)}}
}
ojbk!
?
6)...
More
NPX
NPM 是一個 Node 包管理器,NPX 是一個 Node 包執行器。Node 的執行也可以 NPM 來完成,但是必須進行本地安裝,通過定位本地路徑或者配置 scripts 來能執行。NPX 則通過一個簡單命令大大簡化了包運行的成本,既可以運行本地包,也可以遠程包,無需安裝包也可以執行該包,這就有效避免了本地磁盤污染的問題,節省了本地磁盤空間。
https://juejin.cn/post/7189924390274859066
更新依賴到指定版本
可以使用?@dcloudio/uvm?管理編譯器的版本,此工具僅自動增加或更新 uni-app 編譯器主要依賴,對于新增的編譯命令(scripts)暫時不會自動處理,需手動參考新工程進行配置。
https://uniapp.dcloud.net.cn/quickstart-cli.html#cliversion
uniapp版本管理器
uvm =?uni-app version manager
https://www.npmjs.com/package/@dcloudio/uvm
ending...