Node.js: primeros pasos

El objetivo de esta sección es construir una pequeña aplicación que exponga una API REST sobre HTTP.

Esta sección asume que contamos con node.js y npm (Node Package Manager) instalados. En caso de no ser así podemos encontrar información de como instalar los mismos en el sitio de node: https://nodejs.org/es/

Creando el proyecto

Comenzaremos creando un nuevo directorio para nuestro proyecto.

$ mkdir noticias-unq
$ cd noticias-unq

Una vez en el directorio invocaremos a npm para crear un archivo (package.json) que contendrá la información básica de nuestro proyecto (nombre, versión y dependencias)

$ npm init -y

Podemos entonces editar dicho archivo como querramos:

package.json

{ "name": "noticias-unq", "description": "Noticias UNQ", "version": "1.0.0", "contributors": [ "Javier Fernandes <[email protected]>", "Claudio Fernandez" <[email protected]>" ], "license": "CC-BY-SA-4.0", "main": "index.js", "scripts": { "test": "echo 'Error: no test specified' && exit 1" } }

package.json

En la documentación de npm se encuentra la lista completa de opciones: https://www.npmjs.org/doc/package.json.html

Node.js

Como ya mencionamos Node.js es un entorno de ejecución el cual corre código javascript sobre V8. Utilizaremos el mismo para construir el backend de nuestra aplicación.

Vamos a crear un archivo index.js con el siguiente contenido:

index.js

console.log("Hello world from Node.js")

Luego editaremos el package.json para hacer agregar un nuevo comando al que llamaremos start

package.json

... "scripts": { "start": "node -- index.js" }, ...

Ahora solo resta correr el comando npm start desde la terminal para probar que todo esté funcionando correctamente.

$ npm start

> [email protected] start /development/noticias-unq
> node -- index.js

Hello world from Node.js

Node.js + ES6

Actualmente la V8, la VM sobre la que corre Node.js no soporta enteramente la especificación de javascript conocida como ES6 (ECMAScript 2015). Una lista detallada de los features que ES6 agrega puede encontrarse en este sitio: http://es6-features.org/

Nos interesa incorporar algunos de estos a nuestro proyecto, por ejemplo:

Dado a que el soporte nativo para varios todavía no se encuentra productivo se utiliza para esto un transpilador que no es otra cosa que un traductor encargada de convertir el código ES6 en ES5 compatible.

Instalando Babel

El transpilador que utilizaremos es babel. Instalaremos el mismo utilizando npm de la siguiente forma.

$ npm install --save-dev babel-cli babel-preset-es2015

npm se encargará de proveernos de los modulos requeridos (babel-cli y babel-preset-es2015 en este caso) y todos los modulos "transitivos" que estos requieran a su vez. Los modulos descargados serán almacenados en el directorio node_modules.

Adicionalmente debido a que utilizamos el flag --save-dev npm actualizará las dependencias de nuestro proyecto para declarar que estamos haciendo uso de dichas herramientas. Podemos ver este cambio reflejado en el archivo package.json

package.json

... "devDependencies": { "babel-cli": "^6.18.0", "babel-preset-es2015": "^6.18.0" } ...

Versionado

Este tutorial no alcanza al uso de git ni ningún otra herramienta de versionado de código. No obstante es util aclarar que como buena práctica siempre excluíremos del mismo el directorio node_modules

El archivo package.json si debe ser versionado y a partir del mismo se recreará el directorio node_modules (al ejecutarse el comando npm install)

Luego de instaladas las dependencias de Babel deberemos crear el archivo .bashrc donde configuraremos las opciones de transpilación.

.babelrc

{ "presets": ["es2015"] }

Ejecutando Node.js + Babel

Para correr sencillamente modificamos el archivo package.json para que el comando start invoque a babel.

package.json

... "scripts": { "start": "babel-node -- index.js" }, ...

Luego editamos el archivo index.js para hacer uso de estos features de ES6.

index.js

const greet = (who) => { console.log(`Hello ${who} from Node.js+ES6`) } greet('World')

Al ejecutar el proyecto obtendremos:

$ npm start

> [email protected] start /development/noticias-unq
> babel-node -- index.js

Hello World from Node.js+ES6

results matching ""

    No results matching ""