NodeJS

Cómo usar JavaScript en todos lados

Nicolás Quiroz / @_nhsz

Hola!

Voy a hablar un poco sobre

  • Historia
  • ¿Qué es Node?
  • Un poco de código

Breve repaso histórico

Mayo de 2009: NodeJS es creado por Ryan Dahl (1 año después de que Google liberara el código de V8).

Noviembre del 2009: Presentación en la JsConf.

Enero de 2010: Nace npm, el manejador de paquetes.

Julio de 2011: Primer release para Windows.

Enero de 2012: Ryan da un paso al costado. Isaac Schlueter (compañero de trabajo y creador de npm) se hace cargo.

Enero de 2014: Timothy J. Fontaine toma el lugar de Isaac.

Diciembre de 2014: Fedor Indutny lanzó io.js, un fork de Node. Planeaban mantenerlo al día con las últimas features del engine V8 (por ejemplo, ES6).

Febrero de 2015: Se comienza a discutir la necesidad de formar una fundación neutral para NodeJS.

Junio de 2015: Las comunidades de NodeJS e io.js deciden trabajar juntas y nace la NodeJS Foundation.

Septiembre 2015: NodeJS v0.12 e io.js v3.3 se fusionan en Node v4.0. Esta release incluyó soporte para features de ES6 y dió inicio al ciclo de lanzamientos LTS.

¿Qué es NodeJS?

No es un lenguaje nuevo.

No es un framework.

No es una librería biblioteca de JavaScript.

Según la web oficial (https://nodejs.org/es/)

NodeJS® es un entorno de ejecución para JavaScript, construido con el motor de JavaScript V8 de Chrome.

Utiliza un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente.

El ecosistema de paquetes de NodeJS, npm, es el ecosistema mas grande de bibliotecas de código abierto en el mundo.

JavaScript Runtime Environment

Entorno de ejecución.

Antes, JavaScript sólo podía ejecutarse del lado del cliente.

Es el único lenguaje que puede utilizarse en todo el stack.

V8 JavaScript engine

Intérprete/compilador de JavaScript que utiliza Chrome.

Compila JavaScript a código de máquina nativo.

Event-driven

Basado en eventos.

La ejecución del código se realiza de forma asincrónica.

Non-blocking I/O

Las operaciones de I/O (abrir/cerrar/leer/escribir archivos, etc) no son bloqueantes.

Single-threaded

Corre en un único hilo de ejecución.

Event Loop

NPM

Node Package Manager. Permite publicar, compartir código y manejar dependencias.

Simplifica la instalación, actualización y desinstalación de módulos.

Cliente alternativo: Yarn

Open Source

Estas características hacen que Node sea ideal para aplicaciones web de alta performance, distribuídas, altamente escalables y en tiempo real.

NodeJS joke

tl;dr

Es un entorno de ejecución de JavaScript del lado del servidor.

Permite ejecutar código JavaScript fuera del browser.

¿JavaScript en todos lados?

Sí, en todos lados

Podemos correr NodeJS en cualquier sistema donde sea posible instalar Linux.

Enough talk!

Let's code :)

Instalación: nvm

Node Version Manager. Permite instalar y administrar múltiples versiones.

Instalar nvm

Verificar que nvm se instaló correctamente


            $ command -v nvm
            $ nvm
            $ nvm --version
            

Instalar una versión específica

$ nvm install <node version>

Chequear que Node está instalado

$ node --version

Listar las versiones instaladas

$ nvm ls

Elegir qué version usar

$ nvm use <node version>

Desinstalar una versión específica

$ nvm uninstall <node version>

Nota 1:

Al instalar NodeJS, estamos también instalando NPM.

$ npm -v  // Verificar que NPM se encuentre instalado

Nota 2:

Node incluye funcionalidad por defecto a través de su API.

Ok, ya instalamos Node. ¿Y ahora?

Tenemos acceso a una interfaz REPL.

$ node

Ya podemos ejecutar JavaScript fuera del browser

DEMO: Hola Mundo Node


          $ node
          > console.log('Hola Node')
          Hola Node
          undefined
          

DEMO: Usando NPM

Ejemplo: chalk


          $ npm install --save chalk
          

          var chalk = require('chalk')

          var redColor = chalk.red.bold
          var greenColor = chalk.green.bold

          console.log(redColor('ERROR!'))
          console.log(greenColor('Todo OK :)'))
          

DEMO: Creando un Server


          var http = require('http')

          http.createServer(function (request, response) {
            response.writeHead(200, {'Content-Type': 'text/html'})
            response.write('The server is running OK')
            response.end()
          }).listen(8888)
          

Links recomendados

Gracias!