Os senhores que acompanham este blog sabem que nem todas as postagens são um endosso de uma técnica, mas simplesmente um tutorial de como fazer algo. Às vezes, a técnica descrita provavelmente não é algo que o senhor deva fazer. Esta é uma dessas publicações do blog.
A Analisador Babel é uma ferramenta essencial na pilha da Web atualmente. O Babel nos ajuda a usar padrões de JavaScript antes que eles cheguem ao navegador (encadeamento opcional), bem como JSX para React. Isso me fez pensar: como seria fácil escrever uma extensão do Babel que nos permitisse usar alias de palavras-chave, como fn
em vez de function
? Vamos dar uma olhada!
Criar um alias de palavra-chave com o Babel é mais fácil e mais difícil do que o senhor provavelmente imagina. No lado simples, é essencialmente apenas uma linha de código. Do lado negativo, o senhor precisa modificar o código do analisador principal do Babel.
Como exemplo, digamos que o senhor queira usar o alias fn
para o JavaScript’s function
do JavaScript. Um exemplo de trecho de código seria o seguinte:
// Named function fn myFunction() { return true; } // Function as variable const myOtherFunction = fn() { } // Instantly executing function (fn() { })();
Após a análise, queremos que todas as instâncias de fn
sejam substituídas por function
. Para criar esse alias, precisaríamos modificar o arquivo createKeyword
no seguinte arquivo
// File: packages/babel-parser/src/tokenizer/types.js // We'll be adding one line // ... function createKeyword(name: string, options: TokenOptions = {}): TokenType { options.keyword = name; const token = new TokenType(name, options); keywords.set(name, token); // ADD THIS LINE: if (name === "function") keywords.set("fn", token); return token; } // ...
Para analisar um arquivo de amostra, posso executar:
node packages/babel-parser/bin/babel-parser.js /path/to/sample-file.js
O analisador fornecerá o seguinte quando encontrar uma instância de fn
:
{ "type": "FunctionDeclaration", "start": 0, "end": 36, "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 3, "column": 1 } }, "id": { "type": "Identifier", "start": 3, "end": 13, "loc": { "start": { "line": 1, "column": 3 }, "end": { "line": 1, "column": 13 }, "identifierName": "myFunction" }, "name": "myFunction" } // ...
O senhor deve estar se perguntando “por que eu faria isso?!”. Bem, o senhor provavelmente não faria: modificar uma biblioteca de código-fonte para seu próprio uso é um pesadelo de manutenção e usar palavras-chave não autorizadas em seu código-fonte…. também é um pesadelo de manutenção.
Dito isso, se o senhor quiser experimentar adicionar seus próprios aliases de palavras-chave, modificar o código-fonte do Babel é a melhor opção. Eu adoraria que houvesse uma maneira de escrever uma extensão para fazer isso. Um grande agradecimento ao senhor Logan Smyth por me ajudar a navegar na fonte Babel!