Categorías
Desarrollo

Full-Stack JavaScript, preparando el entorno de desarrollo

A muchos os sonará JavaScript a un lenguaje de programación básico, limitado, acotado a poner «efectos bonitos» en el navegador con jQuery… pero nada más lejos de la realidad. Hace 3 años (inicios del 2013) gracias a la salida y popularización de Node.js junto con MongoDB ha creado una autentica revolución usando este lenguaje como base pero es hace un año, con el cambio a la versión 4 de Node.js cuando el crecimiento es mayor. Ya en 2016 es muy habitual hablar de que se ha sustituido el entorno LAMP (Linux + Apache + MySQL + PHP) por MEAN (MongoDB + Express + AngularJS + Node.js) para la creación de aplicaciones y servicios web o incluso del «Full-Stack Javascript» (a.k.a «FullStack», «Full Stack»…) para el desarrollo desde el servidor, backend, frontend… e incluso aplicaciones de escritorio.

Full-Stack Javascript

Hay mucho que escribir y leer sobre el tema, un montón de conceptos nuevos (Multithread vs Monothread, stack, atom.io, electron.io, Sails.js, sockets.io…) pero poco a poco iremos desmenuzando este apasionante mundo que habla en JavaScript. Por ahora lo que vamos a preparar lo necesario en nuestro PC para empezar a desarrollar en este lenguaje y con estos nuevos conceptos.

Requisitos mínimos

Como es lógico, y para no ocupar nuestra máquina y nuestra cabeza con programas y conceptos nuevos en un solo ejercicio vamos a empezar por lo básico:

  • Sistema operativo Linux. Personalmente uso ubuntu ¿por qué? Porque es al que estoy acostumbrado actualmente, es rápido, sencillo para todo el mundo (el PC de casa y el portátil no los uso yo sólo) y existen toneladas de información en la red para cualquier problema que te pueda surgir. Eso si, recomiendo versiones LTS (Long Term Support) y tendremos un sistema robusto y fácil. También podéis trabajar sobre Mac sin problema¿Se puede usar Windows? Por supuesto que si, pero nos encontraremos con algún que otro problema de configuración (Errores en la creación de enlaces, versiones de los programas no «muy recomendables»…).
  • Editor de texto, entorno de desarrollo, IDE… como le queráis llamar. Hay un millón en la red para usar y veréis que cada «maestrillo tiene su librillo«. Hace un tiempo usaba Sublime Text, es increíblemente rápido y tiene la posibilidad de adaptarlo a tus necesidades (en función del lenguaje que uses, con los extras que quieras…) pero desde hace un tiempo he experimentado problemas con el sistema de Package Control cuando lo uso detrás de un proxy y me he pasado a Atom.io. La verdad es que actualmente estoy muy contento con él, es un poco más lento y pesado que Sublime Text pero su sistema de configuración y su gestor de paquetes para instalar cualquier añadido me han encantado. Además está creado por los chicos de github en JavaScript usando Electron.io por lo que por lo menos sabemos que en eso no va a fallar :-P. A vuestro gusto el escoger el que queráis. En futuras entradas veremos cómo configurarlo para JavaScript y Python (mi otro lenguaje de programación favorito).
  • Node.js y npm. Esta es la parte del servidor. Por un lado tenemos Node.js, para explicarlo de forma cómoda, es el encargado de interpretar y ejecutar JavaScript en el lado del servidor. Cuando pensamos en algún código escrito en JS se nos viene a la cabeza algún código o efecto que vemos en una web, eso está interpretado por el navegador que estamos usando una vez cargada la página. Con Node.js podemos escribir código y que éste sea ejecutado por el servidor y no por el cliente (navegador). Por otro lado tenemos npm, el «Node Package Manager». npm es un ecosistema (similar a lo que es pip en Python) para poder instalar librerías de forma fácil y rápida en nuestro sistema con Node.js. Tiene otras muchas ventajas, pero las iremos descubriendo a media que avanzamos.
  • MongoDB. Esta es la base de datos que usaremos como piedra angular de casi cualquier desarrollo. En algunos casos veremos MySQL o incluso combinaremos ambas pero MongoDB es la que está cambiando el paradigma actualmente. Es una base de datos documental (Almacena los datos usando documentos JSON y no en tablas) y se entiende perfectamente con JavaScript. Poco a poco la irás descubriendo así que no te preocupes si por ahora no te suena.

Ahora que tenemos claro (más o menos, simplemente que os suenen los conceptos, no hace falta que busquéis todos y cada uno de los enlaces, aplicaciones, términos… acabaréis familiarizados en ellos) nuestro listado de necesidades… ¡Manos a la obra!

Instalación de Atom.io

Como comentábamos en el punto anterior, yo uso este editor de texto «enriquecido» como IDE («Integrated Development Environment» o «Entorno de Desarrollo Integrado«). No me voy a parar en este post a configurarlo en profundidad pero por lo menos dejaros el enlace a su web oficial. Para instalarlo simplemente os los descargáis, ejecutáis el archivo y listo.

Descarga de atom.io

Instalación de Node.js

Node.js es el intéprete de JavaScript a nivel de servidor como hemos explicado en la introducción. Dispone de dos versiones siempre disponibles. La versión «LTS» y la «Current». Las dos son perfectamente compatibles y ambas son perfectamente usables. Las diferencias más importantes son:

  • La LTS está centrada en estabilidad.
  • La LTS es la que se mantendrá siempre con mayor tiempo de soporte, actualmente 3 años (Al igual que las distribuciones en Linux).
  • Las LTS siempre serán números pares.
  • Las LTS pasan por 3 fases: Current, LTS y Maintenance. Como se puede intuir, actualmente tenemos 2 LTS «en producción», la 4 y la 6. Se mantendrán ambas para que todo aquello que tenemos desarrollado en la versión 4 podamos pasarlo a la 6 y tener tiempo de reacción si pasa algo (la 4 finaliza en 2018).

calendario de versiones de nodejs

En base a los puntos anteriores y viendo que ya tenemos disponible la versión 6 desde principios de Abril de este año y que es la «futura» LTS vamos a instalar esa. Aunque existen diversos métodos para instalar Node.js yo prefiero añadir los repositorios e instalarlo desde ellos. Para eso, en la terminal:

Y ya tendremos disponible Node.js en nuestro sistema acompañado de npm, su gestor de paquetes. Veremos en breve cómo instalar, desinstalar, actualizar… librerías y demás para Node.js pero, en algunos casos, esta paquetería necesita compilar cosas (aunque no es lo más usual) así que os recomiendo que instaléis las librerías necesarias en Ubuntu:

Para saber que todo ha ido bien y ver qué versión tenemos instalada podemos usar: node --version

MongoDB, «la» base de datos documental

Titulo esta sección como «la» base de datos documental porque, aunque MongoDB no es la única de su género, sin duda es la más popular, la más soportada y la que más ha ayudado a que este Stack sea lo que es hoy día. No hay más que pegarle un rápido vistazo a Google para ver que este motor de bases de datos es rápido, flexible y ha crecido muchísimo en el último par de años.

MongoDB dispone de dos versiones principales: «Community Edition» (libre y gratuita) y «Enterprise» (Con soporte y de pago). Ambas son idénticas en su núcleo, las mayores diferencias son que la «Enterprise» tiene soporte por parte de los creadores, herramientas de monitorización, soporte para diferentes métodos de autenticación… pero realmente nada demasiado importante a un nivel medio (e incluso alto). Para instalarlo en nuestro sistema, en este caso:

Como podéis ver los pasos son los normales con casi cualquier paquete a instalar: Añadir la clave, el repositorio, actualizar e instalar. El único añadido en este caso es el parámetro --allow-unauthenticated  pero este es necesario si estamos instalando MongoDB en Ubuntu 16.04. Si os fijáis en la línea donde se indica el repositorio veremos que indica «trusty» cuando debería ser «xenial». Esto es porque no existe repositorio a día de hoy específico para esta versión de ubuntu y usaremos la de 14.04.

No debería tardar demasiado en salir el reposotorio propio pero mientras, podemos seguir trabajando ya que funciona sin conflictos. Para comprobar la versión que hemos instalado y que todo ha ido bien usamos el comando mongod --version

Solución al error «EACCES» en Ubuntu

Cuando usamos npm para instalar paquetes tenemos varias opciones para hacerlo:

  • Global: Disponible para todo el sistema, como si de un programa más se tratase. Este método sólo se debe usar para librerías que necesitemos de modo general para todo el sistema como aplicaciones de monitorización, despliegue…
  • Local: Únicamente para la carpeta y subcarpetas en las que lo instalamos. Este es el método por defecto para instalar librerías que sólo apliquen al desarrollo que estamos realizando como librerías de autenticación, tratamiento de imágenes…

El problema es que cuando intentamos instalar un paquete global con npm install -g NOMBRE_DEL_PAQUETE el sistema nos devuelve un error «EACCES» por falta de permisos de acceso a la carpeta que npm usa por defecto para almacenar los datos. La propia documentación de npm indica como solventarlo pero, básicamente, consiste en indicarle una nueva ruta para almacenar estos datos para nuestro usuario. Os dejo unas líneas rápidas y cómodas para solucionarlo, simplemente copiad el siguiente código en vuestro terminal:

Y ya tenemos todo preparado y listo para ponernos a trabajar en JavaScript y su Stack. Cualquier duda, cambio o errata avisadme y dejad un comentario. ¡Vamos a ello!