Slide 1

Slide 1 text

JavaScript Como sobreviver a essa sopa de letrinhas com Vue.js

Slide 2

Slide 2 text

Vinicius Reis @vinicius73 @LuizVinicius73 Gravo aulas sobre Vue.js, Javascript e Laravel para codecasts.com.br Engenheiro de Aplicações @ Decision6

Slide 3

Slide 3 text

Ecossistema Javascript

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Assustador?

Slide 6

Slide 6 text

Tudo isso existe por um motivo Cada peça resolve um problema específico.

Slide 7

Slide 7 text

Você não precisa saber todas elas, só que elas resolvem (Como se isso fosse simples...)

Slide 8

Slide 8 text

Organizando os Ingredientes da “sopa”

Slide 9

Slide 9 text

Ecossistema JavaScript ➔ Plataformas ➔ Package Mananer ➔ Task Runners ➔ Transpilers ➔ Bundlers (Builders) ➔ Templates Engines ➔ Scarfolds/Generators ➔ Test Libs ...Eu sei... muita coisa...

Slide 10

Slide 10 text

Antes... O que realmente é o JavaScript?

Slide 11

Slide 11 text

EcmaScript A especificação do JavaScript ➔ Motores ◆ V8 (Chrome, Node, Opera, ...) ◆ SpiderMonkey (Firefox) ◆ Chakra (MS Edge) ◆ Nitro (Safari, Qt 5) ◆ Rhino (Java) ➔ Plataformas ◆ Client-side (Navegadores) ◆ Server-side ● MongoDB, CouchDB ● Node ● JXcore (Node.js fork for IoT) ● DecafJS (JS Sync, Java)

Slide 12

Slide 12 text

Calma... Ainda não acabou...

Slide 13

Slide 13 text

EcmaScript 6 ● Ecma 5.1 -> ES5 ● ES6 -> ES2015 ● ES2016 ● ES2017 ● ES2017 -> ESNext ● ... ATUALIZAÇÕES ANUAIS

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Basicamente nada disso importa no seu dia-a-dia

Slide 16

Slide 16 text

Então o que importa?

Slide 17

Slide 17 text

Plataformas Node não é uma linguagem, ele é uma plataforma com recursos (APIs) próprias. Seu motor é o V8. Não possui DOM. Tem acesso físico a máquina onde está “hospedado” Navegadores tem motores (engines) que interpretam e executam código javascript. Cada motor pode ter suas particularidades. DOM é presente e constante Node Navegador

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Package Manager Ou Gerenciadores de Dependências São ferramentas que (como o nome sugere) gerenciam as dependências dos projetos, facilitando a distribuição e reuso delas.

Slide 20

Slide 20 text

Node Package Manager Gerenciador de dependências padrão do Node Simples e poderoso, mas com seus problemas. NPM

Slide 21

Slide 21 text

Gerenciador de dependências para front-end Simples (até d+) porém cumpre bem seu propósito. Bower

Slide 22

Slide 22 text

Novo na praça Corrige os “problemas” do NPM, sendo mais rápido e inteligente Tem uma compatibilidade com o NPM muito grande Yarn

Slide 23

Slide 23 text

NPM é requisito, saiba ele

Slide 24

Slide 24 text

Task Runners São automatizadores. Facilitam a execução de tarefas, seja em builds, testes ou validações.

Slide 25

Slide 25 text

Foi o primeiro a se popularizar. Possui uma vasta gama de plugins. É relativamente simples (config based) Pode não ser muito flexível ou performático. Grunt

Slide 26

Slide 26 text

“Concorrente” do grunt. Basicamente tudo que existe para grunt existe para gulp. Extremamente flexível. As tarefas são async e baseadas em streams, assim ele fica mais rápido que o grunt. Ele é script based, assim pode ser mais complexo para algumas pessoas Gulp

Slide 27

Slide 27 text

Transpilers Source-to-source Compiler Ferramentas que permitem uma escrita com sintaxe ‘alternativa’ do JavaScript. Muitas vezes o objetivo é facilitar a escrita ou dar mais features

Slide 28

Slide 28 text

Um dos primeiros a se destacar. Possui uma sintaxe similar ao Ruby, pois é inspirado nele. Tem features “extras” ao javascript Seu objetivo é deixar o javascript mais ‘simples’ CoffeeScript

Slide 29

Slide 29 text

Tem se destacado nos últimos anos. Solução da Microsoft para tipagem estática no JavaScript. Além de tipos ele fornece mais features para o JavaScript. TypeScript

Slide 30

Slide 30 text

Popular na comunidade React. Solução do Facebook para tipagem estática no javascript. Diferente do TypeScript, o Flow não dá mais features ao JavaScript, apenas tipos. Flow

Slide 31

Slide 31 text

Babel Babel é um transpiller com o objetivo de permitir a retrocompatibilidade do javascript. Permite escrever códigos ES2015, ES2016, ES2017, ESNext... Mantendo eles compatíveis com navegadores sem suporte.

Slide 32

Slide 32 text

Bundlers Bundle é o termo usado para descrever um arquivo JavaScript gerado dinamicamente a partir da junção de um ou mais arquivos. Muitas vezes esses arquivos passam por um processo de transformação como Babel, CoffeeScript, TypeScript, JSX, Elm, Flow e similares.

Slide 33

Slide 33 text

Primeiro a se popularizar. Extremamente simples. Sua premissa é permitir o uso de requirejs sem precisar do requirejs. Browserify

Slide 34

Slide 34 text

Muito mais que um bundler para arquivos .js Seus loaders permitem processar css, imagens, fontes, scss... É capaz de substituir (em parte) task runners Não é tão simples webpack

Slide 35

Slide 35 text

Nova estrela da constelação. Possui uma abordagem moderna e inteligente. Consegue eliminar “código morto” dos arquivos gerados. rollup.js

Slide 36

Slide 36 text

Template Engine Escrever HTML pode não ser tão simples ou eficiente em determinados cenários. Sistemas de template ajudam nisso.

Slide 37

Slide 37 text

Foi destaque por muito tempo. Agnóstico (como a maioria) Ainda é o sistema de template padrão do Ember Handlebars

Slide 38

Slide 38 text

Atualmente é o que mais se destaca. Simples, versátil e completo. Fornece muitas possibilidades. Pug (Jade)

Slide 39

Slide 39 text

Scarffolds/Generators Ferramentas que permitem começar rapidamente projetos novos.

Slide 40

Slide 40 text

Basicamente o único que importa São muitos tipos de projetos que podem ser criados. Possui uma lista dos geradores feitos pela comunidade Yeoman

Slide 41

Slide 41 text

Mesmo o Yeoman sendo popular, muitas ferramentas decidiram criar suas próprias ferramentas. Comumente chamadas de “cli” Standalones

Slide 42

Slide 42 text

Tests Libs, Runners, Frameworks Uma área um pouco obscura... Temos libs, test runners, frameworks, libs de mock, plataformas... TDD, Integração, BDD...

Slide 43

Slide 43 text

Automatiza testes em navegadores Front-end Usado para outros propósitos além de testes Selenium

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Vue.js Progressive Framework

Slide 46

Slide 46 text

vue-cli Iniciar um projeto com facilidade Usando Babel, WebPack e ESLint

Slide 47

Slide 47 text

Single File Components - Simples, fácil leitura e manutenção - Escreva HTML, Javascript e CSS

Slide 48

Slide 48 text

Single File Components - Gosta de PUG/Jade? - ES2015, JSX, CoffeeScript, TypeScript... - Sass, PostCSS, Stylus...

Slide 49

Slide 49 text

V-DOM

Slide 50

Slide 50 text

mais rápido

Slide 51

Slide 51 text

Server Side Rendering (SSR) Renderizar componentes no backend

Slide 52

Slide 52 text

https://nuxtjs.org/

Slide 53

Slide 53 text

Ecossistema

Slide 54

Slide 54 text

vuex flux para vue.js

Slide 55

Slide 55 text

vue-router Router oficial

Slide 56

Slide 56 text

axios Cliente HTTP agnóstico (Node e Navegador)

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

Obrigado