当前位置: 首页 > Web前端 > vue.js

0成本上手AST,使用GoGoCode解决Vue2迁移到Vue3的问题

时间:2023-03-31 15:48:36 vue.js

1为什么要迁移到Vue3.x?简而言之。..这不是我的错!首先,我们要写一个案例,找到一个可执行的方案。2方案选择参考Vue2到3的官方文档v3.cn.vuejs.org/guide/migra...面对自己项目的一百八十个文件,人为爆肝肯定不行,而且你想都不敢想!唯一的解决办法就是基于AST(抽象语法树)对代码进行解构,按照Vue官网给出的修改建议,批量修改输出文件,升级文档。仅有的。..AST操作有点复杂。考察了几个工具,在GitHub上找到了几个去除代码文件中console.log的例子:(这两个代码参考作为对比方案,可以略过)1.使用jscodeshift操作AST的例子删除console.log:exportdefault(fileInfo,api)=>{constj=api.jscodeshift;constroot=j(fileInfo.source)constcallExpressions=root.find(j.CallExpression,{callee:{type:'MemberExpression',object:(部分代码因篇幅省略,感兴趣的同学请访问github.com/mattphillip…)导出默认函数({types,}:typeofBabelCore):PluginObj{return{name:'console-transform',visitor:{CallExpression(path,{opts,file}){validateSchema(schema,opts);const{env,removeMethods,additionalStyleMethods}=opts;constcallee=path.get('callee');/*由于篇幅限制此处省略40多行代码*/},},};}复制代码以我为本实力,这两个方案真的是很有说服力的案例。正在为这个项目的重构发愁,发帖数急速下降。在社区寻找救助方案的时候,突然发现了GoGoCode这个工具。贴出官方介绍:GoGoCode是一款操作AST的工具,可以降低AST的使用门槛,帮助开发者从繁琐的AST操作中解放出来,更专注于代码解析和转换逻辑的开发。简单的替换甚至不需要学习AST,更复杂的分析和转换在初步学习AST节点结构后就可以完成(参考AST查看器)。GoGoCode的官方文档gogocode.io/zh/docs/spe...这不正是我想要的吗,遇见你,古语说,困了有人递枕头!而GoGoCode操作AST去除代码中的console.log,只需要一行代码!!$(`待转换的代码段`).find(`console.log($_$)`).remove()复制代码熟悉的$符号,熟悉的find、remove等API,扣题,说零成本运营AST不是头条党,太棒了!!!方案已选!!!3开始工作举个栗子:keymodifier迁移方案Vue2to3官方文档-keymodifiermigrationv3.cn.vuejs.org/guide/migra...下面简单总结一下改动:不兼容:使用ofnumbersisnolongersupported(i.e.keycode)Incompatibleasav-onmodifier:config.keyCodesisnotlongersupported写一个Demo根据文档进行转换`,{parseOptions:{html:true}})复制代码使用find,each,attrAPI遍历所有标签及其属性,使用keyCodeMap,替换属性名//find+each遍历所有标签项templateAst.find(['<$_$>','<$_$/>']).each((node)=>{//如果节点contains属性,遍历它的属性if(Array.isArray(node.attr('content.attributes'))){node.attr('content.attributes').forEach((attr)=>{//使用上面构造的摘要keyCodeMap替换匹配的属性名如@keyup.32->@keyup。spacefor(letkeyIteminkeyCodeMap){if(attr.key.content.endsWith(`.${keyItem}`)){attr.key.content=attr.key.content.replace(`.${keyItem}`,`.${keyCodeMap[keyItem]}`)}}})}})复制代码这里使用的node.attr('content.attributes')是刚刚从astexplorer.net工具中找到的最终输出,你是大功告成,对比一下转换结果4小结这段代码中与AST相关的操作只有10行左右,剩下的都是核心的转换逻辑。GoGoCode可以操作AST,体验和使用Jquery操作DOM一样。简单易用,方便新手也有批量处理文件的demogithub.com/thx/gogocod...Github上提出的问题会尽快回复!github.com/thx/gogocod...真是一个代码转换的工具。如果文章中有任何问题,欢迎大家反馈。谢谢,祝你有美好的一天!