sponsored links

阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了

阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了

來自:掘金,作者:阿里媽媽前端快爆

連結:https://juejin.cn/post/6977259197566517284

Vue3 已經出來有一段時間了,很多朋友早已熟讀了文件,寫了好幾個 Demo,饞 Composition API 等新特性已久了。無奈,在實際工作中,大部分朋友還是不得不守著成千上萬行的 Vue2 老專案過日子,做一次框架升級就像給老房子裝修——念頭總是充沛,決心總是匱乏。

其實 Vue 團隊已經儘可能地減少了破壞性更新,還提供了一份細緻的遷移指南[1],條數不少,但定睛一看,大部分都是體力活,有些很簡單,比如非同步元件要多包上一層:

阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了


還有一些就改起來有點麻煩,比如自定義指令生命週期的更名,和傳入引數的一些細微變化:

阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了


看到這種變化後,作為厭惡重複的程式設計師,已經開始盤算著能不能寫個程式碼幫我們把這些規則批次給改好了,當然,寫轉換程式碼的程式碼要比寫網頁難上不少,還好我們之前已經有了一個趁手的工具:GoGoCode[2]

我們之前的文章《阿里媽媽出的新工具,給批次修改專案程式碼減輕了痛苦》[3]介紹過它,作為一個更簡單的 AST處理工具,能大大減輕轉換邏輯的書寫難度,簡直就是為了這事兒量身打造的!

於是我們梳理了遷移指南[4]裡提到的,附帶上 vue-router \ vuex 升級的一些 API 變化,配合 GoGoCode[5]書寫了近 30 條轉換邏輯,涵蓋了 Vue2 到 Vue3 程式碼 break change 的大部分場景,這個程式可以幫助你一鍵把 Vue2 的程式碼轉換成 Vue3 的程式碼。

上面提到的兩條 Vue2 到 Vue3 的差異對比中,右側 Vue3 的程式碼就是透過這個工具根據左側 Vue2 程式碼原片直出的,效果還不錯吧 ^_^,我們來一起試一下!

嘗試一下

全域性安裝 gogocode-cli

npm install gogocode-cli -g複製程式碼

在終端(terminal)中跳轉到需要升級的 Vue 專案路徑。如果需要升級 src 路徑下的 Vue 程式碼,執行如下命令

gogocode -s ./src -t gogocode-plugin-vue -o ./src-out複製程式碼

轉換操作執行完畢後新的 Vue3 程式碼會被寫入到 src-out 目錄中

我們拿 Vue2 的官方示例專案 vue-hackernews-2.0[6]試了一下,發現在轉換的基礎上只要稍作改動再改一下構建流程就能跑起來了,一些轉換的 Diff 如下:(檢視完整 Diff[7]

阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了
阿里釋出新工具,直接幫你改程式碼!網友:工作量又減輕了


這裡只是簡單地介紹,完整的方案請參考:文件[8]

實現比預想的要簡單很多

為了達成轉換目的,GoGoCode[9]新增支援了對 .vue 檔案的解析,我們可以輕鬆地獲取到解析好的 template 和 scirpt AST節點,並利用 GoGoCode 方便的 API 進行處理。

一些簡單的規則,比如前面介紹的非同步元件轉換直接進行類似字串的替換即可,由於是基於 AST 的,所以無需關心程式碼格式,工作量是很小的:

script.replace(' => import($_$)', 'Vue.defineAsyncComponent( => import($_$))').replace(` => ({component: import($_$1),$$$})`,`Vue.defineAsyncComponent({loader:  => import($_$1),$$$})`);複製程式碼

這次專案也檢驗了 GoGoCode 對複雜情況的處理,就像前面提到的自定義指令生命週期的變化,也很輕鬆地做到!

開源了,希望能得到大家的反饋

吃水不忘挖井人,希望這些工作能為 Vue 開源社群做些貢獻,讓社群儘快享受到Vue3帶來的技術紅利,也讓Vue團隊的成員能夠拜託 Vue2 的歷史包袱,更加聚焦於Vue3新特性的研發!專案伊始,存在的不足之處希望得到大家的反饋和幫助:

issues: github.com/thx/gogocod…[10]

釘釘群:34266233

最後:求 star 支援!

Github:github.com/thx/gogocod…[11](本專案在 packages/gogocode-plugin-vue/ 目錄下)

官網:gogocode.io[12]

附錄:當前轉換規則覆蓋

規則 轉換支援 文件
v-for 中的 Ref 陣列 連結[13]
非同步元件 連結[14]
attribute 強制行為 連結[15]
$attrs包含class&style 連結[16]
$children 連結[17]
自定義指令 連結[18]
自定義元素互動 無需轉換 連結[19]
Data 選項 連結[20]
emits選項 連結[21]
事件 API 連結[22]
過濾器 連結[23]
片段 連結[24]
函式式元件 連結[25]
全域性 API 連結[26]
全域性 API Treeshaking 連結[27]
內聯模板 Attribute 連結[28]
keyattribute 連結[29]
按鍵修飾符 連結[30]
移除 $listeners 連結[31]
掛載API變化 連結[32]
propsData 開發中 連結[33]
在 prop 的預設函式中訪問this 無需轉換 連結[34]
渲染函式 API 連結[35]
插槽統一 連結[36]
Suspense 無需轉換 連結[37]
過渡的 class 名更改 連結[38]
Transition 作為 Root 開發中 連結[39]
Transition Group 根元素 連結[40]
移除v-on.native修飾符 連結[41]
v-model 連結[42]
v-if 與 v-for 的優先順序對比 連結[43]
v-bind 合併行為 連結[44]
VNode 生命週期事件 開發中 連結[45]
Watch on Arrays 連結[46]
vuex 連結[47]
vue-router 連結[48]

參考資料

[1]

遷移指南:https://v3.cn.vuejs.org/guide/migration/array-refs.html

[2]

GoGoCode:https://github.com/thx/gogocode

[3]

《阿里媽媽出的新工具,給批次修改專案程式碼減輕了痛苦》: https://juejin.cn/post/6938601548192677918

[4]

遷移指南:https://v3.cn.vuejs.org/guide/migration/array-refs.html

[5]

GoGoCode: https://github.com/thx/gogocode

[6]

vue-hackernews-2.0: https://github.com/vuejs/vue-hackernews-2.0

[7]

檢視完整 Diff: https://github.com/thx/gogocode/commit/6506a0e693aff1896da6c8863fa7e7c72d89610f?branch=6506a0e693aff1896da6c8863fa7e7c72d89610f&diff=split

[8]

文件: https://gogocode.io/zh/docs/specification/vue2-to-vue3

[9]

GoGoCode: https://github.com/thx/gogocode

[10]

github.com/thx/gogocod…: https://github.com/thx/gogocode/issues

[11]

github.com/thx/gogocod…: https://github.com/thx/gogocode

[12]

gogocode.io: https://gogocode.io

分類: 旅遊
時間: 2021-08-22

相關文章

潑水狂歡,夢幻演出,痴狂電音,玩一天都不夠!杭州旅行必打卡

潑水狂歡,夢幻演出,痴狂電音,玩一天都不夠!杭州旅行必打卡
來杭州旅行,除了西湖,宋城是一定要去打卡的.花了一整天泡在宋城,都覺得時間不夠用! 去宋城,一天的時間被安排得妥妥的,這裡有太多的節目和演出了.那哪些節目最不能錯過?看過來. "給我一天,還 ...

細數中國頂級酒店品牌

細數中國頂級酒店品牌
前幾天出了一期盤點亞洲十個國家的頂級酒店品牌,每個國家都列了一家本土最頂級的代表,很多小夥伴提到中國的其他品牌,那我們這一期就來捋一捋中國還有哪些頂級的酒店品牌吧. 中國香港:The Peninsul ...

隱藏在臺州的小眾旅遊地神仙居,千峰林立雲霧繚繞宛如人間

隱藏在臺州的小眾旅遊地神仙居,千峰林立雲霧繚繞宛如人間
序言 神仙居,被世人稱為"神仙居住的地方", 當我進入神仙居景區,我頓時被撲入眼簾的美景所震撼,一座座大山拔地而起,奇峰環列,山崖陡峭,其造型鬼斧神工非常的夢幻,彷彿來到人間仙境一 ...

酒店床尾為什麼會放塊布,今天才知道他原來有這麼多用處

酒店床尾為什麼會放塊布,今天才知道他原來有這麼多用處
來看看今天要教給大家怎樣的實用小知識.為什麼酒店的床尾一定要放一塊布呢? 很多人在外出旅遊住酒店的時候都會發現床尾放著一塊長長的布,這塊布顏色鮮豔,圖案花色多變,與白色的被罩形成鮮明的對比,但是很多人 ...

義大利最奢華的酒店!和咱們真不一樣

義大利最奢華的酒店!和咱們真不一樣
提到義大利,你可能會想到浪漫的佛羅倫薩,想到歷史文化名城羅馬,想到它古樸的教堂.滄桑的遺蹟和燦爛的藝術,抑或是它典雅的時尚.獨特的美食.熱情的足球和傑出的文化.美麗而浪漫的義大利,驚豔了無數來自世界各 ...

北京新建一主題公園,總面積超4平方千米,網友:一票難求

北京新建一主題公園,總面積超4平方千米,網友:一票難求
小編今天給大家介紹一下北京打造的一個環球主題樂園,這個環球影視中心位於北京市的通州區,是亞洲第三座環球影視中心. 這個主題樂園在景區的內部包含了七個大型的主題樂園,裡面設定了很多特殊的娛樂設施專案,有 ...

江浙滬最寶藏的溫泉小城,週末來度個假正合適

江浙滬最寶藏的溫泉小城,週末來度個假正合適
一場秋雨一場寒,喜大普奔,江浙滬終於降溫了. 眾所周知,江浙滬沒有秋天的秋天轉瞬即逝.在沒有暖氣的南方,冬天最美好的念想就是熱騰騰的溫泉.一泡下去,什麼塵世的煩惱都能暫拋腦後. *圖片@旅行家思遠 可 ...

興趣班引起的冷戰:對升學沒用的興趣,你敢讓孩子走多遠?

興趣班引起的冷戰:對升學沒用的興趣,你敢讓孩子走多遠?
閨蜜跟女兒因為上興趣班陷入了冷戰. 閨蜜家女兒馬上六年級,即將進入激烈的小升初.目前在上的興趣班有3個:花樣滑冰.舞蹈和鋼琴,當然,還有3科學科類補習班. 閨蜜跟女兒商量說,馬上就要初中了,興趣班該停 ...

東南亞9國簽證政策彙總:泰國、越南、菲律賓、寮國、馬來全在這

東南亞9國簽證政策彙總:泰國、越南、菲律賓、寮國、馬來全在這
這幾天一直在忙越南.菲律賓.寮國.泰國籤證的事,政策頻變,花邊新聞也多,問老胡的人也多.所以我覺得有必要寫一篇東南亞簽證的情況給到大家,最近跑領館的時間比較多,有時候無法及時回覆大家,希望能理解. 今 ...

相機捕捉到了泰坦尼克號上的最後幾天的真實情況

相機捕捉到了泰坦尼克號上的最後幾天的真實情況
幾乎每個人都知道世界上最大的"不沉"船沉沒的悲慘故事.RMS 泰坦尼克號的傳奇在書籍.電視,當然還有每個人最喜歡的詹姆斯卡梅隆 1997 年大片中流傳.泰坦尼克號的事實和歷史也記錄 ...

大廚詳細教給你廚房四十多種常用香料知識和用處,建議收藏學習

大廚詳細教給你廚房四十多種常用香料知識和用處,建議收藏學習
大家好,我是廚師王俊傑,今天給大家分享飯店和家庭廚房常用的香料知識,以及注意事項. 非常實用的烹飪知識,建議大家收藏儲存,預備不時之需,畢竟大眾生活的條件有限,不可能老是下飯館吃飯,飯店以及酒店的成本 ...

中國最美的海濱自駕公路,比海南涼爽,比廈門安靜,太適合度假了

中國最美的海濱自駕公路,比海南涼爽,比廈門安靜,太適合度假了
提到中國最美的自駕公路,估計不同的人會給出不同的答案,有的朋友會說是318線,有的朋友會說是新疆的獨庫公路,也有朋友會說是海南島環島公路,又或者青藏線.213國道.66號公路.太行山掛壁公路等,大家都 ...

放下北京和房子 是什麼讓80後美女定居都江堰?

放下北京和房子 是什麼讓80後美女定居都江堰?
14年前,四川姑娘雷沁宇背井離鄉前往北京奮鬥.在北京,讀書.工作.生活,努力在人潮湧動的北京買房定居,這座城市給予了她理想奮鬥的一切.但她最終,卻選擇放下北京的一切,來到都江堰. 年輕人往往嚮往一線大 ...

海南省30個5A、4A級旅遊景區,你去過了哪幾個?一次性給你介紹完

海南省30個5A、4A級旅遊景區,你去過了哪幾個?一次性給你介紹完
海南地處中國熱帶地區,自然風光優美,人文景觀奇特,擁有諸多文化旅遊景點.來過海南的朋友,都會被海南的藍天白雲.沙灘海景.黎苗文化.熱帶風光所吸引,每一片海.每一條河.每一座山.每一處熱帶雨林都有自己獨 ...

2021《留學》名企探營第十八站 | 美中國際教育集團——深耕二十五載,成就行業老牌

2021《留學》名企探營第十八站 | 美中國際教育集團——深耕二十五載,成就行業老牌
在315國際消費者權益日當天,<留學>雜誌作為留學行業一線的專業垂直媒體,發起了針對留學行業的摸底與探查活動. 自2021年3月15日開始,<留學>將用6個月的時間,圍繞&qu ...

速看!5分鐘看懂海南文旅產業發展

速看!5分鐘看懂海南文旅產業發展
談到海南的發展,一個是南海最重要的資源是什麼,那就是文旅資源,對海南來說,最重要的產業是什麼,那就是文旅產業.所以談到海南的發展,是離不開文旅兩個字的. 1.海南的文旅產業發展在國內的獨特地位 現在有 ...

中秋還在糾結?廣東這些地方都是親子游的天堂

中秋還在糾結?廣東這些地方都是親子游的天堂
中秋節就要到了! 還在糾結帶孩子去哪裡玩嗎? 廣東這些地方特別家庭出遊哦~ 趕快帶上熊孩子出發吧! 01 增城白水寨 / 廣東山水名片 白水寨空氣清新,花草疊翠,是一個登高好去處,由於山上海拔較高,氣 ...

家庭吃火鍋的“神器”,不用在鍋底瞎撈肉了,新式火鍋功能太強大

家庭吃火鍋的“神器”,不用在鍋底瞎撈肉了,新式火鍋功能太強大
測評的物件有自費購買也有廠家試用的,無論何種方式取得,我承諾:公正.嚴謹.不偏不倚,為粉絲提供可靠的購買參考. 前言: 入秋後,吃火鍋又成為飲食男女的一大生活樂趣,由於這兩年的特殊情況,越來越多的人選 ...

美妙夏日,世界四大草原之一,最好吃的羊肉,錫林郭勒自駕攻略

美妙夏日,世界四大草原之一,最好吃的羊肉,錫林郭勒自駕攻略
平心而論,中國是世界上旅遊自然資源最豐富的國家:海洋.沙漠.戈壁.雪山.草原,無一不有.夏季草原迎來了最旺的季節,涼爽的天氣,一望無際的綠野上,點綴著白色的.黃色的.花色的羊群.牛群.馬群,景色美不勝 ...

英國最精彩的十大主題樂園

英國最精彩的十大主題樂園
英國人從來都是以紳士.淑女為主,以禮儀見長,但這也讓他們看起來刻板守舊.矜持莊重.可能是因為這種一板一眼限制了人的天性,所以英國的樂園大都以刺激.恐怖為主,幫助人們釋放天性,展現平常生活中不一樣的另一 ...