更多例子
清理 console.log
这个操作还是太简单了,我再举一个栗子!
我们经常使用这样的枚举列表:
const list = [
{
text: “A策略”,
value: 1,
tips: “Atip”,
},
{
text: “B策略”,
value: 2,
tips: “Btip”,
},
{
text: “C策略”,
value: 3,
tips: “Ctip”,
},
];
复制代码
突然有一天,为了统一代码里的各种枚举,我们需要把 text 属性更名为 name,把 value 属性更名为 id,这个用正则很难精确匹配容易误伤,操作AST树还有些麻烦,用 GoGoCode 只需要这么替换一下就行了:
const $ = require(‘gogocode’)
const input = `
const list = [
{
text: “A策略”,
value: 1,
tips: “Atip”,
},
{
text: “B策略”,
value: 2,
tips: “Btip”,
},
{
text: “C策略”,
value: 3,
tips: “Ctip”,
},
];
// ts的类型标记,这种正则替换会被错误替换的,在 gogocode 里就不会
const text: string = ‘’
// 这一段因为没有 value 就不会被选择器匹配到,也不会被错误替换
const cfg = {
text: ‘’
}
`
const output = $(input2).replace(
‘{ text: $$1, value: $$2, $$$ }’,
‘{ name: $$1, id: $$2, $$$ }’
).generate();
复制代码
其中 $_$1
和 $_$2
相当于正则中的通配符,但是在这里只会匹配代码里有效的 AST 节点,$$$
则可以匹配剩下的节点,有点像 es6 里的 ...
,这段代码匹配出了 text
和 value
这对应的值填给了 name
和 id
,剩下的原封不动放回去。
而下半部分我刻意加了一些「干扰代码」,以往我通过字符串替换 text:
为 name:
的土办法遇到这样的就会误伤了,但 GoGoCode 不会。
再看前一段社区里的一个例子
正巧,前一段我在掘金看到了文章 像玩 jQuery 一样玩 AST,里面介绍了一个用 jscodeshift 进行 React jsx 代码转换的例子:
打算对这样一份代码做修改:
-
从 @alifd/next 导入改成 antd
-
转译前 改成 转译后
-
Button 中 type 参数转换:normal -> default,medium -> middle
-
Button 中有 text 参数的改成 type=“link”
-
Button 中warning 参数的改成 danger
import * as React from ‘react’;
import styles from ‘./index.module.scss’;
import { Button } from “@alifd/next”;
const Btn = () => {
return (
转译前
Normal
Prirmary
Secondary
Normal
Primary
Secondary
Normal
);
};
export default Btn;
复制代码
大概是这样:
这种需求其实挺常见的,原文提供了一个 基于 jscodeshift 的实现,深入到了 AST 进行操作,但如果用 GoGoCode 就会直观很多:
// 省略依赖和 input
const output = $(input)
.replace(import { $$$ } from "@alifd/next"
, import { $$$ } from "antd"
)
.replace(<h2>转译前</h2>
, <h2>转译后</h2>
)
.replace(
<Button type="normal" $$$></Button>
,
<Button type="default" $$$></Button>
)
.replace(
<Button size="medium" $$$></Button>
,
<Button size="middle" $$$></Button>
)
.replace(<Button text $$$></Button>
, <Button type="link" $$$></Button>
)
.replace(<Button warning $$$></Button>
, <Button danger $$$></Button>
)
.generate();
复制代码
相信你不要讲解也能知道这段代码是要做什么了~
开源了,希望能得到大家的反馈
我觉得这个项目挺有趣的,可以说是专门给代码做了一个 replace 程序,小姐姐说我看到得太浅显,其实这个项目不仅仅是 replace 这一招,这个项目支撑了我们几个几万行前端工程的架构升级计划,就算需求更复杂也是有办法搞定的,大家可以关注我们的账号或专栏,后面作者会发表更专业全面的介绍文章。
小姐姐是我们阿里妈妈 MUX 团队的叶兮,我们团队以前有过 iconfont、Rap、MockJS 这样受到社区欢迎的项目,这一次我们把 GoGoCode 也开源到 Github:github.com/thx/gogocod…,希望能对同样有大量代码修改需求的朋友有所帮助。
我们很希望了解到大家会经常遇到怎样的转换难题,如果你用现在 GoGoCode 不方便解决或者出了错,希望你能提给我们(issue:github.com/thx/gogocod… )。
最后:新项目求 star 支持!
最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后的最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取
mg-ultBfgyq-1713604496072)]
最后的最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取
[外链图片转存中…(img-c5tZa371-1713604496072)]
[外链图片转存中…(img-8dGoOVgp-1713604496072)]
[外链图片转存中…(img-fBTf71iC-1713604496073)]
[外链图片转存中…(img-iSCfaJqy-1713604496073)]