锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

阿里发布新工具,直接帮你改代码!网友:工作量又减轻了~

时间:2022-12-10 23:00:03 thx03微量程动态扭矩传感器

来自掘金,作者:阿里妈妈前端快爆

链接:https://juejin.cn/post/6977259197566517284

Vue3 已经出来一段时间了,很多朋友已经熟悉了文档,写了几个 Demo,馋 Composition API 等待新特征已久。无奈,在实际工作中,大多数朋友还是要守着成千上万行 Vue2 老项目生活,做框架升级就像装修老房子——思想总是丰富,决心总是缺乏。

其实 Vue 该团队尽可能减少了破坏性更新,并提供了详细的迁移指南[1],条数很多,但定睛一看,大部分都是体力活,有些很简单,比如异步组件要多包一层:

9e052c923f112a1f1e11fad41e8eefc2.png还有一些变化有点麻烦,比如自定义命令生命周期的更名,以及传入参数的一些细微变化:

image.png

看到这个变化后,作为一个厌恶重复的程序员,我们已经开始计算是否可以编写代码来帮助我们批量更改这些规则。当然,编写转换代码的代码比编写网页要困难得多。幸运的是,我们以前有一个工具:GoGoCode[2]

我们之前的文章《阿里妈妈的新工具,减轻了批量修改项目代码的痛苦》[3]介绍它,作为一个更简单的介绍 AST处理工具可以大大降低转换逻辑的写作难度,这是为此量身定做的!

所以我们梳理了迁移指南[4]附带上提到的 vue-router \ vuex 升级的一些 API 变化,配合GoGoCode[5]书写了近 30 涵盖了条转换逻辑 Vue2 到 Vue3 代码 break change 的大部分场景,这个程序可以帮助你一键把 Vue2 代码转换成 Vue3 的代码。

上面提到的两个 Vue2 到 Vue3 对比差异,右侧 Vue3 根据左侧的工具,代码是通过这个工具 Vue2 代码原片直出,效果不错 ^_^,让我们一起试试吧!

尝试一下

全局安装 gogocode-cli

npminstallgogocode-cli-g 复制代码

在终端(terminal)跳转到需要升级的地方 Vue 项目路径。如需升级。 src 路径下的 Vue 执行下列命令的代码

gogocode-s./src-tgogocode-plugin-vue-o./src-out 复制代码

转换操作实施后,新的 Vue3 代码代码 src-out 目录中

我们拿 Vue2 官方示例项目vue-hackernews-2.0[6]经过尝试,我发现在转换的基础上,只要稍微改变一下施工过程,就可以运行。一些转换 Diff 如下:(查看完整性 Diff[7]

image.png
image.png

这只是一个简单的介绍。请参考完整的方案:文档[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

--- EOF ---
 
     
 
     
 
     
 
     
 
     

 
     
 
     
 
     
 
     
 
     
 
     
 
     
 
     
 
     
 
     
 
     
 
     
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章