Introdução ao NodeJS

44
Globalcode – Open4education Apresentando NodeJS Giovanni Bassi [email protected] @giovannibassi

description

 

Transcript of Introdução ao NodeJS

Page 1: Introdução ao NodeJS

Globalcode – Open4education

Apresentando NodeJS

Giovanni Bassi

[email protected]

@giovannibassi

Page 2: Introdução ao NodeJS
Page 3: Introdução ao NodeJS

Globalcode – Open4education

Agenda

O que é NodeJS

Modelo assíncrono

Instalando

Módulos

Pacotes

Scripting

Processo de desenvolvimento, debug, testes

Rodando em produção

Mitos, verdades e dúvidas

Page 4: Introdução ao NodeJS

JavaScript no Servidor

Não é baseado em threads

Eficiente e altamente escalável

Page 5: Introdução ao NodeJS

Globalcode – Open4education

Quem usa?

Page 6: Introdução ao NodeJS

Globalcode – Open4education

O que é NodeJS

Ambiente de execução e bibliotecas para rodar JavaScript

Independente de qualquer navegador

Multiplataforma (Linux, Windows, Mac, etc)

Open Source (https://github.com/joyent/node)

Single threaded

Page 7: Introdução ao NodeJS

Globalcode – Open4education

Modelo assíncronoLoop de eventos com uma única thread

Work queueConsulta o banco

Page 8: Introdução ao NodeJS

Globalcode – Open4education

Node é…

Excelente para: Bom para:

Ruim para:

Page 9: Introdução ao NodeJS

Globalcode – Open4education

O que é NodeJS

ServidorNão só http ou https

ClienteApp desktop: excelente opção multiplataforma

Ambiente de desenvolvimento para frontend web

Page 10: Introdução ao NodeJS

Globalcode – Open4education

História

Somente 5 anos de vida (criado em 2009)Lead e criador: Ryan Dahl

2010: começa a ganhar mais popularidade

2011surge NPM

suporte nativo a Windows

2012: Novo lead: Isaac Schlueter (npm)

2014Novo lead: Timothy Fontaine

“bug fixing, performance tuning, staying up to date with the V8 engine”

Page 11: Introdução ao NodeJS

Globalcode – Open4education

Instalando

Linux:baixe os binários

use nvm (node version manager) ou outro similar

use o seu gestor de pacotes favorito (geralmente está desatualizado)

Windows:baixe o instalador (ou o binário)

use o chocolatey

Mac:baixe o instalador ou o binário

Todos: baixe e compile

Page 12: Introdução ao NodeJS

Globalcode – Open4education

Instalando (NVM)

Muito útil para manter diferentes versões do Node na mesma máquina

Para baixar a última versão estável:nvm install 0.10

Para usar uma versão:nvm use 0.10

Para deixar a versão 0.10 imediatamente disponível:

nvm alias default 0.10

Disponível somente em Linux

Page 13: Introdução ao NodeJS

Globalcode – Open4education

Sistemas de versões

Pares: estáveis0.8, 0.10

Ímpares: instáveis/experimentais0.9, 0.11 (ex: já com novidades do EcmaScript 6)

Obs: Pode mudar no futuro

Page 14: Introdução ao NodeJS

Globalcode – Open4education

Primeiro contato: REPL

Abra uma janela de terminal e digite simplesmente “node”:

Page 15: Introdução ao NodeJS

Globalcode – Open4education

Node como ferramenta para JavaScript

Abra uma janela de terminal e digite simplesmente “coffee”:

Page 16: Introdução ao NodeJS

Globalcode – Open4education

Módulos (declarando e consumindo)

//math.jsmodule.exports = { soma: function (a, b) { return a + b; }}

//outro.jsvar math = require('./math');math.soma(1, 2); //3

Page 17: Introdução ao NodeJS

Globalcode – Open4education

Módulos nativos

O Node vem com uma série de módulos nativos, a maioria escrito em JavaScript

Path, Console, HTTP, Streams, Eventos, OS, etc...

API bem documentada em http://nodejs.org/api/

Page 18: Introdução ao NodeJS

Globalcode – Open4education

Pacotes

Gerenciados pelo NPMNPM vem com as instalações padrão do node, mas pode ser atualizado separadamente

npm install npm -g

http://npmjs.org

Quase 90k pacotes

400M de downloads por mês

Empacotam módulos

Utilizam Semver (http://semver.org)

Registry aberto, qualquer um pode registrar pacotes

Suporta “pacotes corporativos”

Page 19: Introdução ao NodeJS

Globalcode – Open4education

Pacotes (dependências)

Sempre locaisHá pacotes globais, mas nunca são carregados pela sua aplicação, mas usados para criar scripts de execução global

coffee, grunt, gulp, mocha, azure

Ficam no diretório node_modules da sua aplicação

Page 20: Introdução ao NodeJS

Globalcode – Open4education

Pacotes (Package.json)

Define um módulo

Informa:Nome e versão do módulo

Versão do node suportada pelo módulo

Endereço do repositório

Dependências de produção, desenvolvimento

Scripts (run, teste, deploy, etc)

Etc...

Page 21: Introdução ao NodeJS

Globalcode – Open4education

Exemplo de package.json

{ "name": "projeto", "version": "0.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC"}

Page 22: Introdução ao NodeJS

Globalcode – Open4education

Pacotes (dependências)

/suaapp /node_modules /dep_a (versão 1.0) /node_modules /dep_z (versão 3.0) /dep_b (versão 1.0) /node_modules /dep_z (versão 4.0)

O único sistema de módulos e pacotes que permite versões diferentes de subdependências

Page 23: Introdução ao NodeJS

Globalcode – Open4education

NPMIniciar um módulo/projeto (vai criar o package.json)

npm init <dir>

Instalar todas as dependências do projetonpm install

Instalar um módulonpm install <modulo>

e gravar isso no package.json--save

ou como dependência de desenvolvimento--save-dev

Atualizar tudonpm update

Page 24: Introdução ao NodeJS

Globalcode – Open4education

DEMOREPL

npm init

npm install

require

Page 25: Introdução ao NodeJS

Globalcode – Open4education

Scripting

Bem mais fácil escrever JavaScript/CoffeeScript do que Bash

Inicie com um shebang apontando pro node e diverta-se:

#!/usr/bin/env nodeconsole.log('hello tdc');

Ou com coffee:#!/usr/bin/env coffeeconsole.log 'hello tdc'

Page 26: Introdução ao NodeJS

Globalcode – Open4education

Processo de desenvolvimento

Inicie o servidor com:node <seuarquivo.js>

Altere o arquivo

Pare e reinicie o servidor

Isso pode ficar muito chato, então use o nodemon ou algo parecido

npm install nodemon -g

Page 27: Introdução ao NodeJS

Globalcode – Open4education

DebugHá um debugger nativo, acessível via linha de comando

node debug <seuarquivo.js>

Complexo de usar, na prática ninguém usa

Ao iniciar dessa forma a aplicação para de imediato

Mais fácil delegar o acesso a uma ferramenta mais avançada

node --debug <seuarquivo.js>

Ou --debug-brk

Abra o node-inspector

Abra o Chrome no endereço indicado e use o F12 que você já conhece

Page 28: Introdução ao NodeJS

Globalcode – Open4education

DEMODebug

Page 29: Introdução ao NodeJS

Globalcode – Open4education

Testes

A natureza assíncrona do JavaScript torna os testes mais difíceis de escrever

Usa-se callbacks e promisses para resolver o problema

Uma série de frameworks existem, atualmente o Mocha é o mais utilizado

Desde testes de unidade simples, até testes de integração usando Selenium, ou ainda testes de código front-end (utilizando JSDom)

Page 30: Introdução ao NodeJS

Globalcode – Open4education

Testes (exemplo com Mocha e CoffeeScript)

describe 'The cart', -> beforeEach -> Cart.get().clear() it 'delivers a list of carts when get is run without args', -> carts = Cart.get() expect(carts.length).to.equal 0 it 'throws when a cart with empty string is requested', -> expect(-> Cart.get('')).to.throw it 'delivers the same cart when the store slug is the same', -> cart = Cart.get('store_1') otherCart = Cart.get('store_1') expect(cart).to.equal otherCart it 'delivers different carts when the store slug isnt the same', -> cart = Cart.get('store_1') otherCart = Cart.get('store_2') expect(cart).not.to.equal otherCart it 'is empty when cleared', -> cart = Cart.get('store_1') expect(cart.items.length).to.equal 0

Page 31: Introdução ao NodeJS

Globalcode – Open4education

IDE? Editor de texto?

Há IDEs se esforçando (Visual Studio, Idea, WebStorm)

A maioria usa editores de texto (VIM, Emacs, Sublime)

O fluxo de trabalho costuma envolver alguns terminais abertos e um editor de textos

Page 32: Introdução ao NodeJS

Globalcode – Open4education

Automatizador de tarefas

Coisas que você faz toda hora podem e devem ser automatizadas

Build, deploy, testes, compilação

As principais ferramentas são o Grunt (mais conhecido e utilizado) e o Gulp (mais novo e com visão inovadora)

Page 33: Introdução ao NodeJS

Globalcode – Open4education

Versionando

Não versione o diretório node_modulesse precisar saber exatamente o que vai rodar utilize o `npm shrinkwrap`

Não versione pacotes de front-end também (deixe o trabalho pro Bower)

Se estiver usando um transpiler, não versione o JavaScript

A não ser que você esteja criando um pacote

Page 34: Introdução ao NodeJS

Globalcode – Open4education

Node para quem usa Java, C#, Ruby...

Mesmo se você não vai usar Node no servidor você pode usar Node se estiver em um projeto com JavaScript (geralmente web)

Compilação de código (CoffeeScript, LESS, etc)

Rodar testes front-end

Otimização requirejs, browserify, webpack, etc

Deploy

Execução de testes

Gestão de pacotes de front-end usando Bower

Page 35: Introdução ao NodeJS

Globalcode – Open4education

Rodando em produção

Independente de Apache, nginx, IIS ou qualquer outro servidor web

Mas normalmente atrás de um deles

Você executa o node diretamente

Lembre-se: single threadedHá gestores de execução para lidar com

Restart

Multiplos núcleos

Falhas

Page 36: Introdução ao NodeJS

Globalcode – Open4education

Node como ferramenta cross-platform

Node permiter cruzar o gap entre as plataformasWindows não tem `which`, então:

npm install which --g

Diversas empresas estão considerando usar o node para fazer seu ferramental de linha de comando em node para ser multiplataforma

Exemplo: Azurenpm install azure-cli

Page 37: Introdução ao NodeJS

Globalcode – Open4education

Mitos, verdades, dúvidas

Page 38: Introdução ao NodeJS

Globalcode – Open4education

NodeJS não escalaMito

Page 39: Introdução ao NodeJS

Globalcode – Open4education

NodeJS não é assim tão rápido quando dizemDepende. Mas em geral é sim. Mas deixa eu explicar.

Page 40: Introdução ao NodeJS

Globalcode – Open4education

Vi um benchmark e o nodejs ficou pra trásNão olhe benchmarks. Já explico porque.

Page 41: Introdução ao NodeJS

Globalcode – Open4education

Preciso codar em JavaScript?Não. Code em CoffeeScript, TypeScript, Clojure...

Page 42: Introdução ao NodeJS

Globalcode – Open4education

DEMO Express(Só se deu tempo)

Page 43: Introdução ao NodeJS

Globalcode – Open4education

Dúvidas?

Page 44: Introdução ao NodeJS

Globalcode – Open4education

Obrigado!

Giovanni Bassi

[email protected]

@giovannibassi