introdução ao nodejs
Post on 22-Apr-2015
1.095 Views
Preview:
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