introdução ao nodejs

Post on 22-Apr-2015

1.077 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Globalcode – Open4education

Apresentando NodeJS

Giovanni Bassi

giovanni@lambda3.com.br

@giovannibassi

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

JavaScript no Servidor

Não é baseado em threads

Eficiente e altamente escalável

Globalcode – Open4education

Quem usa?

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

Globalcode – Open4education

Modelo assíncronoLoop de eventos com uma única thread

Work queueConsulta o banco

Globalcode – Open4education

Node é…

Excelente para: Bom para:

Ruim para:

Globalcode – Open4education

O que é NodeJS

ServidorNão só http ou https

ClienteApp desktop: excelente opção multiplataforma

Ambiente de desenvolvimento para frontend web

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”

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

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

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

Globalcode – Open4education

Primeiro contato: REPL

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

Globalcode – Open4education

Node como ferramenta para JavaScript

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

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

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/

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”

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

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...

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"}

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

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

Globalcode – Open4education

DEMOREPL

npm init

npm install

require

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'

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

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

Globalcode – Open4education

DEMODebug

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)

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

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

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)

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

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

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

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

Globalcode – Open4education

Mitos, verdades, dúvidas

Globalcode – Open4education

NodeJS não escalaMito

Globalcode – Open4education

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

Globalcode – Open4education

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

Globalcode – Open4education

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

Globalcode – Open4education

DEMO Express(Só se deu tempo)

Globalcode – Open4education

Dúvidas?

Globalcode – Open4education

Obrigado!

Giovanni Bassi

giovanni@lambda3.com.br

@giovannibassi

top related