5 분 안에 babel 플러그인을 만드는 방법

이 슬라이드는 「JavaScript 메타프로그래밍 공부회@사쿠라 인터넷 metapro.es」의 LT 자료입니다.



소개



메타 프로그래밍 굉장한



런타임 주입이라면 Ruby나 PHP, JS로 상당히 간단하게 할 수 있다



주입이라면 쉽게 할 수 있습니다.



하지만 검은 마술이되기 쉽고 실제 제품 개발로 해내면 아무래도 취급하기 어렵습니다.



타인이 쓴 메타프로 생성 코드를 보았을 때



🤔🤔🤔🤔🤔



🙄



정적 해석 굉장한



하지만 모르겠어!



라는 사람을 위한 첫걸음



자기소개


  • potato4d

  • metapro.js 발기인
  • 프런트 엔드 엔지니어


  • 메타 프로그래밍 모르겠어요



    내가 알게 되기 위해 알고 있는 사람을 불러 공부회를 열었다



    왜 말하는가?



    "자신의 QoL을 높이는 정도라면 의외로 누구나 플러그인을 쓸 수 있어"라고 말하고 싶으니까



    만든 것



    process.env.NODE_ENV가 production이 아닌 경우 설정된 문자를 대체하는 플러그인



    https://기주 b. 키 m / Potato 4d / Babel P ぅ 긴-p ぁ세온 ly- ゔ ぇ p 맨 t



    동작:.babelrc


    {
      "plugins": [
        [
          "babel-plugin-replace-only-development",
          {
            "rules": {
              "https://api.example.com": "http://localhost:3000"
            },
          }
        ]
      ]
    }
    
    

    동작: Before


    import axios from 'axios'
    
    axios.get('https://api.example.com')
    

    작동: After


    import axios from 'axios'
    
    axios.get('http://localhost:3000')
    

    사용 미치



    아무래도 좋은 것을 만들었지만 로컬과 배포시 API ROOT를 바꾸고 싶지만 설정을 관리하는 것이 까다로울 때



    드물게 자주



    replace 밖에 하지 않는 간단한 구성



    만드는 법



    만들고 싶은 것을 결정


  • 예를 들어 console.log 리무버 또는
  • console.log를 xhr로 바꾸고 로깅을 원하지 않습니까? 라든지
  • 그런 남자


  • 재밌게 babel 플러그인의 초기 설정하기



    ...
  • CLI 인터페이스와 옵션을 babel 시스템에 의존 할 수 있기 때문에 쉽습니다
  • 이번 샘플 플러그인은 yarn init부터 시작해서 정말로 최소한이므로 사용해 보세요!


  • 구문으로 무엇에 속하는지 알아보기



  • AST 탐색기 즐겁게 코드를 던져.
  • 나온 type을 copipe


  • AST 탐색기





    플러그인의 템플리를 유용


    const { transform } = require('@babel/core')
    const plugin = ({types: t}, options) => {
      return {
        visitor: {
          Literal (path, file) {
            // Literalなのでここに書く
          }
        }
      }
    }
    
    module.exports = plugin
    

    Babel Plugin Handbook을 보고 싶은 걸 알아보기


  • htps : // 기주 b. 코 m/쟈미에부이 lds/바베 l 밥 d보오 k/bぉb/마s테 r/t란 sぁ 치온 s/자/p md


  • 쓰기


    // ...
          Literal (path, file) {
            Object.entries(options.rules).forEach(([before, after]) => {
              if (path.get('literal').container.value == before) {
                path.replaceWith(t.stringLiteral(after))
              }
            })
          }
    // ...
    

    완성









    하고 싶은 사람에게



    네 가지 팁



    1. babel 플러그인으로 하면 JS 파서를 준비하지 않아도 되므로 편하게



    2. AST 탐색기와 Handbook이 있으면 2초에 할 수 있다고 생각하는 것은 20분 있으면 할 수 있다



    3. 우선 AST는 구문 나무가 있어~정도의 기분으로 어색하게 시작한다



    4. 대체하는 시스템은 Type을 조사하고 replaceWith만으로 쓰러 뜨릴 수 있기 때문에



    참고가 된 자료



    참고가 된 자료



  • AST 탐색기
  • 사용하지 않으면 비인간적인 AST 뇌내 퍼스가 시작된다


  • Babel Plugin Handbook
  • 이것이 있으면 어떻게든


  • babel@6 플러그인을 만드는 간단한 방법
  • 간단한 것을 만드는 방법은 거의 쓰고있다



  • 요약



    요약


  • babel 플러그인으로 만들면 JS 파서를 준비하지 않아도됩니다.
  • 자료는 엉망이기 때문에 누구나 처음 한 걸음은 만들 수 있다
  • AST 탐색기가 없으면 인권이 없으므로 최선을 다할 것입니다
  • Qiita라든지에도 의외로 기사는 있으므로 유효 활용 미끄러짐
  • 그건 그렇고, webpack plugin을 만들려고하면 그렇게 너무 많지 않아서 블루 오션

  • Type만 알면 나머지는 갈라지고 진흙 냄새 작업 같다


  • 해보자

    좋은 웹페이지 즐겨찾기