最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【D1n910】項目遷移 Vue3.0 + Vite + typescript 踩31坑記錄

2021-07-13 10:14 作者:愛交作業(yè)的D1N910  | 我要投稿

正常操作,正常分析,大家好,我是 D1n910(蛋糕)。


可惡的蛋糕,害苦了我的同事們,是蛋糕說的,新項目,可以用新技術(shù)跑一下,沒想到這么多坑。好在現(xiàn)在暫時活了下來。


遷移之前,一定要看 Vue2.0 升級到 Vue3.0 相關(guān)的文檔。


很多問題,順手改了,也沒記下來,想必也是簡單問題。



0、項目遷移方案

用 vite 直接生成新的項目,然后再從舊項目逐步遷移代碼到新項目,vue-router、vuex、element-plus 等全家桶內(nèi)容升級到最新。


原來的 mixins 內(nèi)容,如果較為復雜,暫時不處理。不復雜的轉(zhuǎn)為 setup。


1、使用 less 報錯

在項目啟動,直接使用 less,報送以下錯誤。


[vite] Internal server error: Preprocessor dependency "less" not found. Did you install it?


原因是新初始化的項目沒有 less。


用下面的指令安裝 less 然后執(zhí)行即可。


yarn add less less-loader


2、啟動后,不能夠用ip地址訪問,只能用localhost

啟動指令添加 '--host' 配置即可。


?"dev": "vite --host"


3、安裝 eslint 后報錯,vite安裝vue項目報錯(Error: esbuild: Failed to install correctly),參考鏈接 https://blog.csdn.net/m0_37682004/article/details/115001613


手動運行



來解決esbuild安裝問題


安裝完成之后,再次運行 npm run dev 即可。


4、Vite,typescript 設(shè)置別名(類似webpack的resolve.alias)

參考自


https://blog.csdn.net/weixin_43980237/article/details/117929461


(1)修改 vite.config.ts 配置

(2)修改 tsconfig.json 配置,這樣 ts 才能檢測到



5、別名設(shè)置錯誤,重新設(shè)置

error when starting dev server:

Error: The following dependencies are imported but could not be resolved:


……?Are they installed?


這是因為第 4 步的時候設(shè)置別名搞錯了,所以需要重新設(shè)置。


7、this.$route 拿不到

參考鏈接


https://www.jianshu.com/p/00c109c36e38


router.currentRoute 來獲取



8、this.$router 拿不到


9、$on、$emit?原來?vue2.0?的事件API,vue3.0被廢棄,改為用?mitt?來實現(xiàn)



10、Vite通過代理(proxy)解決本地開發(fā)接口調(diào)用及跨域問題

參考

https://www.cnblogs.com/hy999/p/vue-vite-proxy.html


在 vite.config 中這么寫配置


vue3 在 vite.config 中無法使用import.meta.env.*的解決辦法


參考鏈接


https://www.jianshu.com/p/4973bd983e96



附帶環(huán)境變量配置


根目錄下文件命名方式


文件內(nèi)書寫方式



11、添加 eslint(todo)

https://blog.csdn.net/qq_23398171/article/details/115010584

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=vite%20%E5%AE%9E%E6%97%B6%E7%9B%91%E6%B5%8B%20eslint%20%E4%BB%A3%E7%A0%81&rsv_spt=1&oq=vite%2520%25E5%25AE%259E%25E6%2597%25B6%25E7%259B%2591%25E6%25B5%258B%25E4%25BB%25A3%25E7%25A0%2581&rsv_pq=b4a56256000d953f&rsv_t=571bQpjSAO7ykPfBBs55BXsoR07Y%2FO2S6hNEfT2qZ2QpXNXMievdQ427twcrDwPr9ZkI&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3962&rsv_sug3=60&rsv_sug1=13&rsv_sug7=100&rsv_sug2=0&rsv_sug4=4770


這個比較復雜,然后對于 vite 使用 eslint 有一個問題,我還沒搞清楚,就是如何能夠在 vite 運行時,檢測到 eslint 報錯,打斷運行,紅色提示。vite 內(nèi)部編譯報錯會這樣,但是我還沒找到 vite-eslint 的。


12、Vue 3.0 原型鏈拓展屬性(vue3.0使用TypeScript 如何拓展一個方法并且this可以訪問,不報錯?)


參考鏈接


https://www.jianshu.com/p/12faae13496d


13、拓展方法,BUS的運用,個人對于 12 的理解使用


這個作用是,模仿全局對象上掛vue實例,這樣就能夠在沒有vue實例的方法中調(diào)用 vue 實例上掛載的方法,比如 element 的 this.$message。


BUS 文件?—— any 我找個時間去一下……


14、模塊引用方式,換為 ref,看 vue3 文檔,模塊引用篇


15、elForm 表單值不能填寫

14的延伸問題,發(fā)現(xiàn)是因為 ref 對應(yīng)的變量名 和 v-model 綁定的變量名一樣了。


類似下面這樣


ref="from"

v-model="form"


改為不一樣就行了。


16、Vue3.0 typescript props 設(shè)置泛型 提示錯誤

參考

https://github.com/nuxt/typescript/issues/285

修改 eslint 配置


17、vue-router 的? addRoutes 修改為?addRoute

需要注意,addRoutes 可以傳入數(shù)組。最新的 vue-router 已廢棄??addRoutes。改為使用addRoute。


addRoute 變成單個對象了。


相當于得這樣



咱也不知道為什么要廢棄,咱也不敢問。


18、router 提示 Catch all routes ("*") must now be defined using a param with a custom regexp.


參考自?

https://blog.csdn.net/c6c6c/article/details/110558290

原因是要改為正則匹配



19、語法提示,變量名稱最好不要用 $ 或者 _? 下劃線開頭


20、Property "xxx" was accessed during render but is not defined on instance.


屬性“xxx”在渲染期間被訪問,但未在實例上定義。


就是屬性沒定義,定義一下。



21、Extraneous non-props attributes (class) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.


無關(guān)的非props屬性(類)已傳遞給組件,但無法自動繼承,因為組件呈現(xiàn)片段或文本根節(jié)點。


https://blog.csdn.net/qq_38888512/article/details/117224108


[Vue warn]: Extraneous non-props attributes (border, style) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.

at xxxx(發(fā)生問題的組件位置)

at ...


在自定義組件上添加了border、style屬性,而自定義組件內(nèi)部又未去接收,因此警告了。

所以,要么在組件內(nèi)部加上屬性接收。如果是在第三方庫UI庫的話,建議直接去掉這些屬性。


發(fā)現(xiàn)就是 element-plus 的 dialog 不支持 class,參考 element-plus 文檔換了能夠改 class 的屬性,這個具體是什么屬性的問題,提示里其實也有給出。像下面說的“class”

22、Failed to resolve component: xxx

不能加載 xxx 組件。

引用的組件沒有在 component 聲明,或者原來全局/局部加載的組件沒有全局加載。

參考

https://blog.csdn.net/qq_41983641/article/details/115361460


23、升級 v-contextmenu 到最新版本

參考

https://github.com/heynext/v-contextmenu


yarn add v-contextmenu@next


import contextmenu from "v-contextmenu";

import "v-contextmenu/dist/themes/default.css";


Vue.use(contextmenu);


24、vue問題--[Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep-


vue-router 新版本的問題,需要改寫 router-view 的包裹方式方式,參考鏈接

https://blog.csdn.net/tjj3027/article/details/109597720


25、build 構(gòu)建,vue-tsc --noEmit指令,ts 監(jiān)測了 node_modules 下的代碼

在tsconfig.json文件中使用exclude


"exclude": [

? ?"node_modules"

?]


在 tsconfig.json 配置里加入

"compilerOptions": {

"skipLibCheck": true

}


26(todo)、build 構(gòu)建,vue-tsc --noEmit指令,ts 監(jiān)測了 template 的內(nèi)容,報送不能找到 name。

ts會檢查 template 下的內(nèi)容,寫法不兼容,所以檢測不到。未解決。

考慮

A、修改ts配置;

B、改寫為tsx寫法;

C、構(gòu)建時暫時不用?vue-tsc 先監(jiān)測;

D、其他。

目前為了趕項目上線面選用方法 C,以后會妥善解決的。


27、slot 方式改變,slot不用 v-slot,改成 #slotName



28、element-plus?elTabs tab-click 綁定方法報錯

原因是傳值變成組件實例了,所以之前取值報送 undefined


改為用 props 去獲得

比如原來的

@tab-click="doSomthing"


doSomthing(data) {

console.log(data.value)

}


改為

doSomthing(data) {

console.log(data.props.value)

}


29、vite 數(shù)據(jù)不實時視圖更新

解決方法

(1)? 重啟 vite

(2)? 查看變量名是否沖突有誤,場景:

父組件屬性名稱 aaa,通過 props 傳入子組件;

子組件內(nèi)部data命名為 aaa,覆蓋了 props 的 aaa,所以沒變化。

(3)(未嘗試)處理瀏覽器緩存?


30、切換路由報送錯誤,自定義指令錯誤

切換路由報送 Uncaught (in promise) TypeError: Cannot read property 'parentNode' of null。

Uncaught (in promise) TypeError: Cannot read property 'created' of undefined。

我這邊的原因是是自定義指令有問題,發(fā)現(xiàn)自定義指令沒有注冊成功。修復后無報錯。


31、自定義指令不生效

發(fā)現(xiàn)是因為用了已廢棄的生命周期。原來我用的 inserted 改成了 mounted。解決問題。

Vue3.0 的生命周期有修改,參考 https://v3.cn.vuejs.org/guide/custom-directive.html#%E7%AE%80%E4%BB%8B。



到了第31個問題以后,基本上項目基礎(chǔ)架構(gòu)遷移完畢了,剩下的就是繼續(xù)業(yè)務(wù)開發(fā)了。


所謂看到新技術(shù)一時爽,一用火葬場。


用了一段時間,稍微說一下自己覺得用了這些新內(nèi)容的好處。


Vue3.0確實感覺更加像 React 了,原來的一個 vue 文件走天下,現(xiàn)在似乎被打散了,帶來的我感覺就是更加靈活,更加心無所“狗”;


typescript 讓我更有規(guī)則地“狗”,幫忙發(fā)現(xiàn)代碼中的問題;(在 ts 之下,any,永遠的神!我看到很多原型的聲明也用的any。不過用any也不是很好,后面會逐步把臨時寫的any)


vite用起來目前感覺就是快,好快,因為這是內(nèi)部系統(tǒng),所以兼容性問題不是考慮范圍內(nèi),部署以后加載提效 42%。本地構(gòu)建也起飛???。尤大永遠的神。


繼續(xù)開發(fā)去了。


END

【D1n910】項目遷移 Vue3.0 + Vite + typescript 踩31坑記錄的評論 (共 條)

分享到微博請遵守國家法律
清远市| 桐乡市| 社会| 庆元县| 龙井市| 确山县| 吴桥县| 三穗县| 黎城县| 拜泉县| 罗源县| 营口市| 仙居县| 天祝| 凤城市| 滨海县| 长顺县| 福鼎市| 衡水市| 奉新县| 金塔县| 建水县| 阆中市| 灵武市| 隆化县| 晋中市| 灵台县| 隆昌县| 麻江县| 廉江市| 吉安市| 丁青县| 兴隆县| 信阳市| 平遥县| 广宁县| 松原市| 南郑县| 宝丰县| 广平县| 平果县|