- Yeoman
- Ferramentas
- Generators
- AngularJS
- Gerando o App
- Instalando uma nova dependência (bower)
- Yeoman Generators
- Tests
Conjunto de ferramentas e boas práticas, fazendo com que o desenvolvimento para a web seja melhor e mais ágil.
Foco em aumentar a produtividade.
Instalaçãonpm install -g yo
Essa instrução já vai instalar o Yeoman, Grunt e Bower automaticamente.
Yo
Inicializa o seu projeto, criando o esqueleto da aplicação, criar uma configuração para o bower e para o grunt já implementando algumas tasks essenciais que você provavelmente vai precisar.
Grunt
Automatiza tarefas repetitivas, como fazer build, testes e preparar o projeto para ser executado.
Bower
Gerencia as dependências do seu projeto, você não precisa mais ficar fazendo download manual e gerenciar versões de bibliotecas de terceiros.
São como receitas para você inicializar uma aplicação
A idéia por trás desse conceito é você criar os esqueletos dos seus projetos com as suas boas práticas e convenções.
Já existe uma série de Generators disponíveis. Você pode encontrar executando essa instrução no seu terminal.
npm search yeoman-generator
Nós vamos usar o generator no AngularJS.
npm install -g generator-angular
É um framework com uma série de peculiaridades e características eficientes e poderosas.
Gerando um app AngularJS com Yeoman
Para gerar o App você só precisa disso:
yo angular
O Generator vai fazer uma série de perguntas do que você pretende instalar. Você pode responder sim para todas, nesse caso.
O Yeoman vai criar vários arquivos e pastas, executar o bower install (para instalar as dependências da aplicação) e executar o npm install (para instalar as dependências das tarefas do grunt).
app/: A pasta contém os seus arquivos estáticos, seu html, css e javascript, onde provavelmente você vai passar a maior parte do seu tempo.
package.json: Esse arquivo configura o que o npm fará no seu projeto. Ele gerencia as depêndencias das tarefas do grunt.
node_modules/: A pasta onde o npm instala suas dependências.
Gruntfile.js: É um arquivo javascript responsável por configurar as tarefas que o grunt vai executar no seu projeto. Ele define variáveis de ambiente, as tarefas e a sequência em que as tarefas serão executadas.
bower.json: Ele funciona como o package.json, mas para o bower. Em algumas versões mais antigas esse arquivo pode ser component.json.
.bowerrc: Ele configura algumas variáveis gerais do bower.
arquivos Karma: Karma é um framework de testes. Esses arquivos configuram ou executam alguns testes na sua aplicação.
Acabamos de criar uma aplicação e entender o que acontece durante o processo.
Para executá-la, basta executar esse comando no seu terminal:
grunt server
Ele executa algumas tarefas, subir um servidor HTTP e iniciar a tarefa watch, que fica observando a sua pasta app/ e exectua algumas tarefas quando algum arquivo é alterado, por fim, ele vai abrir seu navegador já com a aplicação executando.
Como já vimos antes, o bower é um gerenciador de dependências. Nele você vai encontrar frameworks, como o Twitter Bootstrap, bibliotecas Javascript, plugins de jQuery e outras coisas.
Nesse exemplo vamos usar uma biblioteca chamada Angular Bootstrap, do Angular-UI, são os plugins do Twitter Bootstrap exportados para o AngularJS.
Para instalar
bower install angular-bootstrap --save
A flag --save diz ao bower que essa dependência tem que ser salva no seu arquivo bower.json.
Em alguns segundos você já está com a biblioteca instalada no seu projeto, na pasta app/bower_components/.
Para isso vamos precisar adicionar o script à aplicação, adiconando essa linha junto com os outros scripts no app/index.html.
<script src="bower_components/angular-bootstrap/ui-bootstrap.js"></script>
Agora, no arquivo app/scripts/app.js vamos adicionar a dependência à aplicação, o início do seu arquivo vai ficar mais ou menos assim:
'use strict'; angular.module('appExempleApp', [ 'ngCookies', 'ngResource', 'ngSanitize', 'ui.bootstrap' // adicione a dependência ]) ...
Fazendo isso o seu app já vai estar hábil a utilizar a biblioteca.
Vamos alterar a view pricipal para utilizar algum recurso da biblioteca. Alterando o arquivo app/views/main.html, adicionando algumas linhas.
<ul> <li class="dropdown"> <a class="dropdown-toggle"> Click me to see some awesome things! </a> <ul class="dropdown-menu"> <li ng-repeat="thing in awesomeThings"> <a>{{thing}}</a> </li> </ul> </li> </ul>
O generator do Angular, além de gerar a aplicação, também tem um série de generators para você usar durante o desenvolvimento.
Vamos criar uma nova rota para a nossa aplicação, a rota devfest.
Para criar é só executar essa instrução no seu terminal:
yo angular:route devfest
O generator irá gerar um controller, uma view e vai atualizar o arquivo app/scripts/app.js com a nova rota.
Acessando a sua rota (/devfest) você vai visualizar o que o Yeoman criou.
This is the devfest view.
Antes de executar os testes, precisamos atualizar as depêndiencias da nossa aplicação.
No arquivo karma-config.js adicionamos na propriedade files as depêndencias que instalamos pelo bower, seu arquivo vai ficar parecido com isso:
files: [ 'app/bower_components/angular/angular.js', 'app/bower_components/angular-mocks/angular-mocks.js', 'app/bower_components/angular-resource/angular-resource.js', // nova dependência 'app/bower_components/angular-cookies/angular-cookies.js', // nova dependência 'app/bower_components/angular-sanitize/angular-sanitize.js', // nova dependência 'app/bower_components/angular-bootstrap/ui-bootstrap.js', // nova dependência 'app/scripts/*.js', 'app/scripts/**/*.js', 'test/mock/**/*.js', 'test/spec/**/*.js' ],
O generator já cria na sua aplicação alguns testes para executar, basta você executar:
grunt test
Ele vai executar algumas tarefas para preparar os testes, vai executar os testes e exibir o relatório de todos os testes no final.
Vamos forçar um erro. No arquivo /app/scripts/controllers/main.js, adicione um item em awesomeThings. Ele vai ficar parecido com isso:
'use strict'; angular.module('appExempleApp') .controller('MainCtrl', function ($scope) { $scope.awesomeThings = [ 'HTML5 Boilerplate', 'AngularJS', 'Karma', 'DevFest 2013' // novo item ]; });
Ao executar o grunt test novamente ele vai indicar que um dos tests deu erro.
Para corrigir é só alterar o arquivo tests/spec/controllers/main.js, indicando que o awesomeThings deve ter 4 itens.
expect(scope.awesomeThings.length).toBe(4);
Executando o grunt test mais uma vez todos os testes vão ser executados com sucesso.
Por fim vamos preparar a nossa aplicação para o ambiente final.
Executando no terminal:
grunt build
O Grunt vai executar uma série de tarefas incluindo cssmin, htmlmin, imagesmin, uglify dos js e por fim ele vai criar um pasta dist/ com a sua aplicação pronta para o ambiente final.
O AngularJS por si só já é um framework poderoso.
Com o apoio do Yeoman vimos como fica mais ágil e produtivo:
AngularJS + Yeoman: http://goo.gl/ZYoOlz