• [AST Babel] Create a simple babel plugin


    For example, we have the source code:

    getVersison('3.4.5')
    
    function getVersion(versionString) {
        const versionRegex = /(d).(d).(d+)/
        const [, major, minor, patch] = versionRegex.exec(versionString)
        return {major, minor, patch}
    }

    We want to transform it into:

    const _versionRegex = /(d).(d).(d+)/;
    getVersison('3.4.5')
    
    function getVersion(versionString) {
        const [, major, minor, patch] = _versionRegex.exec(versionString)
        return {major, minor, patch}
    }

    Babel plugin:

    export default function (babel) {
      const { types: t } = babel;
      
      return {
        name: "ast-transform", // not required
        visitor: {
          RegExpLiteral(path) {
            const name = path.parent.id.name; //versionRege
            const newIdentifier = path.scope.generateUidIdentifier(name) // _versionRegex
            const variableDeclaration = t.variableDeclaration('const', [
                t.variableDeclarator(newIdentifier, path.node)
            ]) // const _versionRegex = /(d).(d).(d+)/;
            
            console.log(variableDeclaration)
            
            
            /*
            - const [, major, minor, patch] = versionRegex.exec(versionString)
            + const [, major, minor, patch] = _versionRegex.exec(versionString)
            */
            path.scope.rename(name, newIdentifier.name)
            
            const program = path.findParent(
             t.isProgram
            )
            
            console.log(program.node.body)
            
            program.node.body.unshift(variableDeclaration) // + const _versionRegex = /(d).(d).(d+)/;
            
            path.parentPath.remove() // - const versionRegex = /(d).(d).(d+)/
          }
        }
      };
    }
  • 相关阅读:
    Log4net在类库中调用写法
    ruby问题
    C#获取项目程序路径的方法
    Redis数据类型
    WCF身份验证之用户名密码认证
    Log4Net 配置和使用
    Windows 下配置ruby on rails环境
    动态网页转静态化的方法
    如何确认Devkit是否安装成功
    AS400中加入各种颜色
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12332952.html
Copyright © 2020-2023  润新知