Usando Cake em CoffeeScript

{title}

O CoffeeScript é uma linguagem que nos permite escrever um código JavaScript melhor, unificando-o e enquadrando-o sob a mesma estrutura, onde teremos certeza de que o código JavaScript criado pelo CoffeeScript por outro desenvolvedor será idêntico ao nosso.
Mas isso não é tudo o que o CoffeeScript oferece, além disso, possui uma ferramenta chamada Cake, semelhante ao Grunt, que permite definir tarefas simples para nos ajudar em nossos projetos, pois podemos precisar de uma tarefa para executar testes ou apenas uma para fazer. construa nossos arquivos e tudo isso podemos fazer com o Cake através de um arquivo chamado Cakefile .
Exigências

Para concluir este tutorial, precisamos ter uma instalação funcional do CoffeeScript, também precisamos de permissões para gravar arquivos e executar o CoffeeScript no computador em que estamos executando o tutorial. Precisamos de um editor de texto como o Sublime Text para poder escrever o código de nossos exemplos e nunca é demais dar uma olhada nos tutoriais de idiomas anteriores.

Bolo e arquivo de bolo


Antes de iniciar, é importante mencionar que não precisamos instalar o Cake ; no momento da nossa instalação inicial do CoffeeScript, a ferramenta é instalada igualmente; portanto, não precisamos fazer nada adicional para começar a trabalhar com ela.
Sabendo disso, podemos começar a trabalhar com o Cake, mas devemos entender que todas as tarefas que acreditamos devem estar localizadas em um arquivo chamado Cakefile, que deve ter exatamente o mesmo nome, pois cakefile será um arquivo totalmente diferente e o compilador não o reconhecerá. .
Esse arquivo deve estar na raiz do nosso projeto e é da maior importância que seu conteúdo seja apenas código CoffeeScript . Tendo esclarecido isso, vamos ver como criar nossa primeira tarefa com o Cake .

Tarefas com bolo


Vamos criar uma pasta chamada cakefile_example e lá criaremos um arquivo chamado Cakefile.coffee e ele conterá o seguinte conteúdo:
 tarefa "greeting", "Vamos cumprimentar a grande comunidade de Solvetic", -> console.log "Olá, mundo!" 
Antes de explicar nosso código, compilaremos e veremos o conteúdo gerado em JavaScript, isso não é necessário, pois nunca veremos esse código, mas desta vez não seria prejudicial entender melhor o que o CoffeeScript está fazendo, vamos ver a saída:

{title}


Como estamos no contexto, podemos explicar nosso código, primeiro definimos a tarefa com a função de tarefa que é adicionada automaticamente a cada arquivo Cakefile . O primeiro argumento da função é o nome da tarefa, neste caso está cumprimentando e o usaremos no console de comando para executar a tarefa; o segundo argumento pode ser opcional e é uma descrição da tarefa que aparecerá na lista de Nossas tarefas disponíveis. O último argumento que enviamos na função task é outra função que será executada pela tarefa e é aí que a maior parte de nossa lógica será depositada.
O exemplo anterior foi apenas para verificar o que o compilador estava fazendo, mas nosso arquivo Cakefile não deve ter nenhuma extensão. Além disso, podemos ver quais tarefas temos disponíveis com o comando cake no console de comandos. Vamos ver como é:

{title}


Como podemos ver, podemos ver o nome da nossa tarefa, bem como a descrição. Agora, para executar uma tarefa específica, usamos o comando cake seguido pelo nome da tarefa; para concluir, vamos ver a saída através do console:

{title}

Usando opções


Já sabemos como criar uma tarefa e executá-la, mas e se queremos passar alguns argumentos para ela? Por exemplo, e se quisermos que nossa saudação seja totalmente personalizada de acordo com um valor que enviamos? Isso é bem simples de fazer, vamos ver.
A primeira coisa que devemos fazer em nossa tarefa é definir a opção, fazemos isso com a função de opção disponível Cake . Essa função recebe três argumentos, o primeiro é a forma abreviada da opção, o segundo é a forma longa e a última é uma descrição do que faz a opção, algo importante se estamos desenvolvendo como uma equipe e queremos documentar nossas tarefas. Em seguida, faremos as modificações em nossa tarefa para definir a opção:
 opção '-n', '--name [NAME]', 'name to greet' task "greeting", "Diga olá para alguém", (opções) -> message = "Hello", se options.name? message + = options.name else message + = "Mundo" console.log mensagem 
Como vimos antes da definição da tarefa, temos nossa função de opção, seguida pela forma abreviada que seria –n, então temos a forma longa que seria –name, especificando que um valor aguardará e, finalmente, a descrição. Vamos executar o comando cake e ver a saída em nosso console:

{title}


Como vemos, temos o nome da nossa tarefa, a descrição e, abaixo dela, temos as opções disponíveis, a opção curta e a longa, além da descrição. Executaremos nossa tarefa com a opção curta e veremos a saída através do console:

{title}


Para executar uma tarefa com opções, é importante especificar primeiro os argumentos e, em seguida, o nome da tarefa, pois, se não ocorrermos um erro, isso não indica muito do que pode estar acontecendo com o nosso arquivo Cakefile. Vamos ver como a execução está sendo usada. A segunda opção:

$config[ads_text5] not found

{title}


Algo peculiar acontecendo aqui é que, antes de executar a tarefa, usamos a opção com um único script, dando-nos um erro e é a coisa certa, pois em nossa tarefa definimos a opção como --- name em vez de –name, demonstrando o Eficácia do CoffeeScript para a operação de tarefas.
Além disso, podemos definir se uma opção é necessária e fazemos isso na definição da tarefa, verificando se o valor existe e se não emitirmos um erro, vamos ver como esse código se parece:
 opção '-n', '--name [NAME]', 'nome que deseja cumprimentar' task "greeting", "Verifique se a opção existe", (opções) -> lança novo erro ("[NAME] é um valor obrigatório "), a menos que options.name? console.log "Olá, # {options.name}" 
Em seguida, executaremos nossa tarefa, mas desta vez ignorando a opção como argumento e vamos ver a resposta do console:

$config[ads_text6] not found

{title}


Como podemos ver, o erro que incluímos no arquivo foi mostrado, sendo possível validar que as opções para nossas tarefas são passadas como argumentos quando necessário.

Convocando outras tarefas


Já tendo visto como criar nossas tarefas e definir opções para elas, é importante ver como podemos executar tarefas que estão dentro de outras pessoas. Por exemplo, podemos ter duas tarefas em comum em um projeto em que uma delas é responsável pela limpeza dos diretórios que criamos para o projeto e a outra pela compilação e construção, vamos ver como essas duas tarefas que acabamos de ver descreva:
 task "clean", "Esta tarefa executa a limpeza dos diretórios", -> console.log "limpando o diretório ..." task "build", "Compilar e compilar os arquivos para o projeto", -> console.log "construindo ..." 
Vamos executar o comando cake e ver a resposta no console:

{title}


Além disso, para executar as duas tarefas juntas, podemos usar o comando cake seguido pelos dois nomes de nossas tarefas:

{title}


Como vemos, não há nada de estranho em nossas tarefas, mas se somos observadores, percebemos que primeiro precisamos executar a tarefa de limpeza sempre antes da tarefa de construção, mas o que acontece se queremos uma terceira tarefa chamada empacotamento, que empacotará o projeto para nós? Em seguida, devemos primeiro construí-lo, garantir que os diretórios estejam limpos e finalmente compilar.
O problema é que essa solução não é ótima. Se, por algum motivo, esquecermos de chamar a tarefa de limpa ou pior, nossa tarefa de construção terá problemas com a terceira, felizmente o Cake nos permite chamar uma tarefa dentro de outra com a função invoque, vamos ver como o nosso arquivo Cakefile se parece com a nova tarefa e as modificações:
 task "clean", "Esta tarefa executa a limpeza dos diretórios", -> console.log "limpando o diretório ..." task "build", "Compilar e compilar os arquivos para o projeto", -> console.log "building ..." task "package", "clean, build and package our project", -> invoca "clean" invoca "build" console.log "empacotando ..." 
Agora, apenas precisamos chamar nossa embalagem e, dessa forma, garantir que as outras duas tarefas necessárias sejam chamadas sem problemas, vamos ver a saída no console de comando:

{title}


É importante mencionar que as tarefas que usam a função de chamada são executadas de forma assíncrona; portanto, não temos garantia de que a tarefa limpa seja executada antes da criação e do empacotamento; portanto, devemos ter cuidado no uso.
Com isso, concluímos este tutorial, onde aprendemos a criar nossas tarefas, executá-las, dar-lhes opções e até mesmo como invocar outras tarefas dentro de outras pessoas, expandindo assim nosso conhecimento nessa linguagem eficaz que contribui para as melhores práticas de qualquer desenvolvimento.