SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
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í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

Contenu connexe

Tendances

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 NodejsRafael Soares
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensRodrigo Matheus
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
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
 
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 utilizarFilipe Falcão
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
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 PassosJackson F. de A. Mafra
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaí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.jsCaio Ribeiro Pereira
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVinícius Krolow
 
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 MultithreadingRhuan Karlus Silva
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 

Tendances (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
 

Similaire à 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 2014Giovanni Bassi
 
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 SourceGlobalcode
 
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 DockerWellington Silva
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2Cezar 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
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson 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 PHPRodrigo 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 OpenSourcetdc-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 CompetenteMichael 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-122Bruno 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 JHipsterEdlaine Zamora
 
TDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net CoreTDC2016SP - Por dentro do .Net Core
TDC2016SP - Por dentro do .Net Coretdc-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
 

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

Plus 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çosGiovanni 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 .NETGiovanni 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 agoraGiovanni 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 kubernetesGiovanni 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.1Giovanni 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# 8Giovanni 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 deployGiovanni 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êineresGiovanni 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 2Giovanni 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 LinuxGiovanni 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 agoraGiovanni 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.jsGiovanni 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.jsGiovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windowsGiovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET CoreGiovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com dockerGiovanni 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
 

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

Introdução ao NodeJS

  • 1. Globalcode – Open4education Apresentando NodeJS Giovanni Bassi giovanni@lambda3.com.br @giovannibassi
  • 2.
  • 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