SlideShare uma empresa Scribd logo
Globalcode – Open4education
Apresentando NodeJS
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
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
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íncrono
Loop de eventos com uma única thread
Globalcode – Open4education
Node é…
Globalcode – Open4education
O que é NodeJS
Servidor
Não só http ou https
Cliente
App 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
2011
surge NPM
suporte nativo a Windows
2012: Novo lead: Isaac Schlueter (npm)
2014
Novo 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áveis
0.8, 0.10
Ímpares: instáveis/experimentais
0.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.js
module.exports = {
soma: function (a, b) { return a + b; }
}
//outro.js
var 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 NPM
NPM 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 locais
Há 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
NPM
Iniciar um módulo/projeto (vai criar o package.json)
npm init <dir>
Instalar todas as dependências do projeto
npm install
Instalar um módulo
npm install <modulo>
e gravar isso no package.json
--save
ou como dependência de desenvolvimento
--save-dev
Atualizar tudo
npm update
Globalcode – Open4education
DEMO
REPL
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 node
console.log('hello tdc');
Ou com coffee:
#!/usr/bin/env coffee
console.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
Debug
Há 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
DEMO
Debug
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_modules
se 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 threaded
Há 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 plataformas
Windows 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: Azure
npm install azure-cli
Globalcode – Open4education
Mitos, verdades,
dúvidas
Globalcode – Open4education
NodeJS não escala
Mito
Globalcode – Open4education
NodeJS não é assim
tão rápido quando
dizem
Depende. Mas em geral é sim. Mas deixa eu explicar.
Globalcode – Open4education
Vi um benchmark e o
nodejs ficou pra trás
Nã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

Mais conteúdo relacionado

Mais procurados

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
Rafael Soares
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
Rodrigo Matheus
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
Just Digital
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
Austin Felipe Santos
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
Pablo Souza
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
Márcio Silvestroni
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
Laís Lima
 
Apresentação
ApresentaçãoApresentação
Apresentação
Marcelo de castro
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Jackson F. de A. Mafra
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
Caio Ribeiro Pereira
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
Ricardo Martinelli de Oliveira
 
Jugvale
JugvaleJugvale
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
Laís Lima
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
Caio Ribeiro Pereira
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
Vinícius Krolow
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
Caio Ribeiro Pereira
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
Rhuan Karlus Silva
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
Laís Lima
 
Node.js
Node.jsNode.js
Node.js
luizhse
 

Mais procurados (20)

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
 
Jugvale
JugvaleJugvale
Jugvale
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Node.js
Node.jsNode.js
Node.js
 

Semelhante a Introdução ao NodeJS

ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
Giovanni Bassi
 
Desenvolvendo com IONIC
Desenvolvendo com IONICDesenvolvendo com IONIC
Desenvolvendo com IONIC
Michel Anderson Lütz Teixeira
 
IC-Testes Invasao
IC-Testes InvasaoIC-Testes Invasao
IC-Testes Invasao
Denny Vriesman
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Renato Groff
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Renato Groff
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
Globalcode
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
Wellington Silva
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
Cezar Souza
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Renato Groff
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
Eder Magalhães
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
Dan Vitoriano
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Rodrigo Dos Santos
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
tdc-globalcode
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
Bruno Tanoue
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
Michael Cardoso
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
Bruno Souza
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Edlaine Zamora
 
TDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net CoreTDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net Core
tdc-globalcode
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
tdc-globalcode
 

Semelhante a Introdução ao NodeJS (20)

ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Desenvolvendo com IONIC
Desenvolvendo com IONICDesenvolvendo com IONIC
Desenvolvendo com IONIC
 
IC-Testes Invasao
IC-Testes InvasaoIC-Testes Invasao
IC-Testes Invasao
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
TDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net CoreTDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net Core
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 

Mais de Giovanni Bassi

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
Giovanni Bassi
 
Sendo ágil com git
Sendo ágil com gitSendo ágil com git
Sendo ágil com git
Giovanni Bassi
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
Giovanni Bassi
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
Giovanni Bassi
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Giovanni Bassi
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
Giovanni Bassi
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
Giovanni Bassi
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
Giovanni Bassi
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
Giovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
Giovanni Bassi
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
Giovanni Bassi
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
Giovanni Bassi
 
O Futuro do C#: C#8
O Futuro do C#: C#8O Futuro do C#: C#8
O Futuro do C#: C#8
Giovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windows
Giovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET Core
Giovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
Giovanni Bassi
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Giovanni Bassi
 

Mais de Giovanni Bassi (20)

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
 
Sendo ágil com git
Sendo ágil com gitSendo ágil com git
Sendo ágil com git
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
 
O Futuro do C#: C#8
O Futuro do C#: C#8O Futuro do C#: C#8
O Futuro do C#: C#8
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windows
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET Core
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
 

Último

Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
zetec10
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
Ismael Ash
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
ronaldos10
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ismael Ash
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
Faga1939
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
snerdct
 

Último (6)

Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
 

Introdução ao NodeJS

  • 1. Globalcode – Open4education Apresentando NodeJS Giovanni Bassi giovanni@lambda3.com.br @giovannibassi
  • 3. 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
  • 4. JavaScript no Servidor Não é baseado em threads Eficiente e altamente escalável
  • 6. 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
  • 7. Globalcode – Open4education Modelo assíncrono Loop de eventos com uma única thread
  • 9. Globalcode – Open4education O que é NodeJS Servidor Não só http ou https Cliente App desktop: excelente opção multiplataforma Ambiente de desenvolvimento para frontend web
  • 10. Globalcode – Open4education História Somente 5 anos de vida (criado em 2009) Lead e criador: Ryan Dahl 2010: começa a ganhar mais popularidade 2011 surge NPM suporte nativo a Windows 2012: Novo lead: Isaac Schlueter (npm) 2014 Novo lead: Timothy Fontaine “bug fixing, performance tuning, staying up to date with the V8 engine”
  • 11. 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
  • 12. 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
  • 13. Globalcode – Open4education Sistemas de versões Pares: estáveis 0.8, 0.10 Ímpares: instáveis/experimentais 0.9, 0.11 (ex: já com novidades do EcmaScript 6) Obs: Pode mudar no futuro
  • 14. Globalcode – Open4education Primeiro contato: REPL Abra uma janela de terminal e digite simplesmente “node”:
  • 15. Globalcode – Open4education Node como ferramenta para JavaScript Abra uma janela de terminal e digite simplesmente “coffee”:
  • 16. Globalcode – Open4education Módulos (declarando e consumindo) //math.js module.exports = { soma: function (a, b) { return a + b; } } //outro.js var math = require('./math'); math.soma(1, 2); //3
  • 17. 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/
  • 18. Globalcode – Open4education Pacotes Gerenciados pelo NPM NPM 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”
  • 19. Globalcode – Open4education Pacotes (dependências) Sempre locais Há 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
  • 20. 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...
  • 21. 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" }
  • 22. 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
  • 23. Globalcode – Open4education NPM Iniciar um módulo/projeto (vai criar o package.json) npm init <dir> Instalar todas as dependências do projeto npm install Instalar um módulo npm install <modulo> e gravar isso no package.json --save ou como dependência de desenvolvimento --save-dev Atualizar tudo npm update
  • 25. 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 node console.log('hello tdc'); Ou com coffee: #!/usr/bin/env coffee console.log 'hello tdc'
  • 26. 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
  • 27. Globalcode – Open4education Debug Há 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
  • 29. 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)
  • 30. 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
  • 31. 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
  • 32. 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)
  • 33. Globalcode – Open4education Versionando Não versione o diretório node_modules se 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
  • 34. 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
  • 35. 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 threaded Há gestores de execução para lidar com Restart Multiplos núcleos Falhas
  • 36. Globalcode – Open4education Node como ferramenta cross-platform Node permiter cruzar o gap entre as plataformas Windows 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: Azure npm install azure-cli
  • 39. Globalcode – Open4education NodeJS não é assim tão rápido quando dizem Depende. Mas em geral é sim. Mas deixa eu explicar.
  • 40. Globalcode – Open4education Vi um benchmark e o nodejs ficou pra trás Não olhe benchmarks. Já explico porque.
  • 41. Globalcode – Open4education Preciso codar em JavaScript? Não. Code em CoffeeScript, TypeScript, Clojure...
  • 42. Globalcode – Open4education DEMO Express (Só se deu tempo)
  • 44. Globalcode – Open4education Obrigado! Giovanni Bassi giovanni@lambda3.com.br @giovannibassi