jscodeshift入门简介&代码重构&代码分析&&React

jcodeshift是facebook出的一款围绕recast的加强过的能够遍历更改js 里面ast节点 而且从新生成js代码的工具。 基于ast的代码重构工具。git

它借助于babelon来将es6 ts等代码转化为ast树结构。能够看看es6

import {bootstrappedFragmentContainer} from '../../bootstrapped';

bootstrappedFragmentContainer(Blah, graphql``);


复制代码

它对应的ast结构如图 github

image

每一个ast节点的定义 能够去 ast-types查看 ,注意后面替换ast的时候常常须要去查看这个ast节点的定义来构造对应的节点。bootstrap

以下:api

ast类型

ast节点查看 能够将代码粘贴在左边便可。bash

ast查看babel

先来一个小的demoapp

先下载jscodeshift编辑器

功能是这样的 :ide

function ab() {

    let ab = 90;
}

function cd() {

    let ab = 89;

}

转化为:

function testab() {

    let ab = 90;
}

function cd() {

    let ab = 89;

}

复制代码

即把ab函数的名字替换为

testab
复制代码

,若是单纯使用编辑器的替换功能确定是达不到要求的,

那么如今 jscodeshift 就上场了

先编写一个transform 文件 告诉jscodeshift 要how to do ?

export default function transformer(file, api) {
    const j = api.jscodeshift;

    const source = j(file.source)

    source
       //查找函数表达式
        .find(j.FunctionDeclaration)
        //筛选函数名字叫ab的
        .filter(path => path.value.id.name == 'ab')
        //替换该函数节点
        .replaceWith(path => {
            //生成了一个新的函数声明 
            //j.builder(id,[param],body)
            //具体细则能够去上面的ast-types里面去查看
            return j.functionDeclaration(
                    j.identifier('testab'), 
                    [], 
                    path.value.body
                )

        })
    //使用替换后的ast节点从新生成源码
    return source.toSource({
        quote: 'single',
    });
}

复制代码

如今运行命令:

jscodeshift -t ./transform.js ./demo.js --dry
复制代码

能够看见转义成功了。 也能够把上面的代码直接拷贝到ast查看窗口去看。

如今基本认识到了

jscodeshift
复制代码

的工做 相似于babel将 es6 转义为es5的代码。 其实能够这样说 jscodeshift 是babel的一个超集 。由于它还能够转义 ts代码等等。

稍后咱们会来分析一些经常使用babel插件的转义过程

相关文章
相关标签/搜索