105 - 《手撕源码 05:jscodeshift》
发布于 2022年4月27日
jscodeshift 是什么?
Star 7.3K,周下载 222W,facebook 出品。jscodeshift 是老牌的 JS 语言(也支持 TS 等类 JS 语言)的 codemod 工具,官方定义是「A JavaScript codemod toolkit.」。codemod 是什么?就是你之前代码是这么写的,然后希望改成另一个样子,要么手动改,要么通过工具改,而 codemod 就是通过工具改代码的一种方式。
比如要把 const abc = 1 改成 const cba = 1,就需要把 identifier(语法树里的一种类型)翻转一下,用 jscodeshift 的话,先定义一个 transformer。
// 接口:transform({ path, source }, { j, jscodeshift, stats, report }, options)
export default transformer(file, api) {
return api.j(file.source).find(j.Identifier).replaceWith(
p => j.identifier(p.node.name.split('').reverse().join(''))
).toSource();
}
然后,执行命令指定 transformer 和要转的代码,
$ jscodeshift -t path/to/transformer.js src
✅ 大功告成!
为什么调研 jscodeshift?
今天(2022.4.28)发布了 Bigfish 4,Bigfish 是蚂蚁内网基于 Umi 的前端框架。新的框架总会带来 break change,而这些 break change 又不希望框架用户一行行改,就需要提供 codemod 工具。
Bigfish 2 升 3 时就提供过,当时其他同事负责的,用的