{"id":3693,"date":"2013-03-08T08:05:51","date_gmt":"2013-03-08T07:05:51","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=3693"},"modified":"2013-03-10T11:48:24","modified_gmt":"2013-03-10T10:48:24","slug":"introduccion-a-node-js","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/introduccion-a-node-js\/","title":{"rendered":"Introducci\u00f3n a Node.js"},"content":{"rendered":"<p style=\"text-align: justify;\">Node.js es una nueva tecnolog\u00eda bastante asombrosa y potente, pero al menos que seamos desarrolladores de Javascript, el proceso de aprendizaje puede ser un poco abrumador.<\/p>\n<p style=\"text-align: justify;\">Node.js es un entorno de programaci\u00f3n del lado del servidor (server-side) a diferencia de la ejecuci\u00f3n normal en el lado del cliente o navegador (client-side). Esta basado en lenguaje <strong>Javascript<\/strong> (que no tiene nada que ver con JAVA, ojo),\u00a0arquitectura\u00a0orientada a objetos, funcionamiento por eventos del servidor, basado en el motor V8. Este motor es de c\u00f3digo abierto y fue creado por Google, siendo su programador jefe <a href=\"http:\/\/channel9.msdn.com\/Shows\/Going+Deep\/Lars-Bak-and-Steve-Lucco-Chakra-V8-JavaScript-Open-Source\" target=\"_blank\">Lars Bak<\/a>.<\/p>\n<p style=\"text-align: justify;\">El motor V8 se ha programado en C++ y es usado por el navegador Google Chrome adem\u00e1s de otros sistemas como el browser del sistema Operativo Android.<\/p>\n<p style=\"text-align: justify;\">Sepamos algo m\u00e1s sobre NodeJS &#8230;<\/p>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">NodeJs, conocido con la palabra Node, surge en el a\u00f1o 2009 como necesidad existente a la hora de desarrollar sitios web, donde la concurrencia y la velocidad eran premisas a cumplir.<\/p>\n<p style=\"text-align: justify;\">Una de las caracter\u00edsticas m\u00e1s\u00a0importantes\u00a0de Node es la velocidad, est\u00e1 especialmente dise\u00f1ado para realizar operaciones I\/O( entrada y salida).<\/p>\n<p style=\"text-align: justify;\">Es esencialmente un framework para realizar operaciones I\/O, basado en eventos y streams. Cambia la filosof\u00eda de trabajo y la manera de entender el lenguaje Javascript.<\/p>\n<p style=\"text-align: justify;\">Cuando programamos con Node, solamente nos preocupamos que el c\u00f3digo que se escriba se ejecute correctamente en el servidor. La programaci\u00f3n as\u00edncrona y los eventos del lado del servidor son otros factores a tener en cuenta.<\/p>\n<p style=\"text-align: justify;\">NodeJs implementa protocolos usados en Internet, como son HTTP, DNS, SSL, TLS. Un protocolo especial es <a href=\"http:\/\/es.wikipedia.org\/wiki\/SPDY\" target=\"_blank\">SPDY<\/a>, una implementaci\u00f3n sencilla en nodejs, desarrollado principalmente por google y que pretende modernizar el protocolo HTTP, siendo m\u00e1s r\u00e1pido y con mayor rendimiento.<\/p>\n<p style=\"text-align: justify;\">Node es usado por empresas importantes, como <a href=\"http:\/\/www.linkedin.com\/\" target=\"_blank\">Linkein<\/a>, optimizando los recursos y siendo capaz de reducir el numero de servidores para dar soporte a los usuarios.<\/p>\n<p style=\"text-align: justify;\">Una gran virtud de node es que los procesos ocupan poca memoria, respecto a otros lenguajes, por lo que los requisitos del servidor son menores. Como ejemplo, podr\u00edamos llegar a tener 1000 usuarios conectados concurrentemente y ocupar s\u00f3lo 5 Mb de memoria. Por lo que las empresas ahorran en infraestructuras, es decir, en dinero.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/Nodejs1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3709\" alt=\"Nodejs1\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/Nodejs1.png\" width=\"779\" height=\"277\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/Nodejs1.png 779w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/Nodejs1-300x106.png 300w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/a><\/p>\n<p>\u00a0<strong>Instalaci\u00f3n<\/strong><\/p>\n<p>El punto de partida es <a href=\"http:\/\/nodejs.org\" target=\"_blank\">nodejs.org<\/a>, es la web donde podremos descargarlo e instalarlo.<\/p>\n<p style=\"text-align: justify;\">El proceso cambia en funci\u00f3n del sistema operativo, y su modo de trabajo es independiente de la plataforma. Eso si, en funci\u00f3n del sistema operativo pueden cambiar los m\u00f3dulos. Los m\u00f3dulos son paquetes de software para tener soporte a diferentes necesidades.<\/p>\n<p style=\"text-align: justify;\">La instalaci\u00f3n en <strong>Windows <\/strong>consiste en ejecutar un archivo con extensi\u00f3n msi, seguir los pasos. Una vez instalado podemos usarlo en l\u00ednea de comandos mediante la instrucci\u00f3n <strong>node<\/strong>.<\/p>\n<p style=\"text-align: justify;\">En <strong>Linux<\/strong> se puede instalar de diferentes formas. Lo m\u00e1s aconsejable es\u00a0baj\u00e1rselo\u00a0de los repos de tu distro.<\/p>\n<p style=\"text-align: justify;\">Ejemplo desde Ubuntu:<\/p>\n<p>sudo apt-get install python-software-properties<br \/>\nsudo add-apt-repository ppa:chris-lea\/node.js<br \/>\nsudo apt-get update<br \/>\nsudo apt-get install nodejs npm<\/p>\n<p>Otra alternativa es descargarse los fuentes y compilarles.<\/p>\n<p style=\"text-align: justify;\">En <strong>Mac<\/strong> con homebrew,<br \/>\nmediante el comando\u00a0brew install nodejs<\/p>\n<p style=\"text-align: justify;\">Una pregunta que seguramente os plante\u00e9is, es como montar esto en un servidor o hosting. Recomiendo servidores dedicados y no solamente ce\u00f1irnos a Apache o IIS. Existe un servidor del que hablar\u00e9 en otra entrada llamada <a href=\"http:\/\/nginx.org\/\" target=\"_blank\">nginx<\/a>. Por ahora os dejo el enlace, pero comentan que es\u00a0extremadamente\u00a0r\u00e1pido. Os dejo otro enlace en ingles, no hay muchos, que muestra c\u00f3mo configurar Node en un servidor virtual en <a href=\"http:\/\/bigbangtechnology.com\/post\/installation_configuration_deployment_node.js_applications_on_media_temple\/\" target=\"_blank\">Plesk<\/a>, paciencia \ud83d\ude09<\/p>\n<p style=\"text-align: justify;\"><strong>Otras particularidades.<\/strong><\/p>\n<p style=\"text-align: justify;\">Node.js implementa alguna especificaci\u00f3n <a href=\"http:\/\/en.wikipedia.org\/wiki\/CommonJS\" target=\"_blank\">CommonJS<\/a>. Esto es un proyecto cuya meta es especificar un ecosistema para Javascript fuera del uso del navegador. Inicialmente el proyecto se llamo ServerJS pero desde el a\u00f1o 2009 fue renombrado a CommonJS.<\/p>\n<p style=\"text-align: justify;\">Node tambi\u00e9n proporciona un entorno para el testeo interactivo, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Read%E2%80%93eval%E2%80%93print_loop\" target=\"_blank\">REPL<\/a>.<br \/>\nRead-Eval-Print Loop, es un simple e interactivo entorno de programaci\u00f3n. Se encuentra disponible como programa independiente en node y f\u00e1cilmente puede ser incluido en otros programas. REPL proporciona una forma interactiva de ejecutar Javascript y ver los resultados. Puede ser usado en depuraci\u00f3n y pruebas. M\u00e1s informaci\u00f3n sobre <a href=\"http:\/\/nodejs-es.github.com\/api\/repl.html\" target=\"_blank\">REPL <\/a>en castellano.<\/p>\n<p style=\"text-align: justify;\"><strong>Caracter\u00edsticas generales<\/strong><\/p>\n<p style=\"text-align: justify;\">NodeJs proporciona un &#8220;Javascript sin restricciones&#8221; ya que no tenemos que preocuparnos si nuestro c\u00f3digo fuente es compatible o no con diferentes navegadores. Lo que se codifique en Node, su funcionamiento ser\u00e1 el mismo independientemente del sistema que se conecte. Esto realmente es una caracter\u00edstica que afecta a todos los lenguajes del lado del servidor.<\/p>\n<p style=\"text-align: justify;\">La<strong> programaci\u00f3n as\u00edncrona<\/strong> es otra gran caracter\u00edstica. En la mayor\u00eda de los lenguajes, cuando ejecutamos l\u00ednea a l\u00ednea un c\u00f3digo, no se ejecuta la siguiente l\u00ednea hasta que se procese la primera. En node se crean hilos o threads y subprocesos. Esta es la caracter\u00edstica de la programaci\u00f3n as\u00edncrona, los hilos permitir\u00e1n ganar velocidad y parecer que todo se ejecuta a la vez. Se pueden establecer <strong>callbacks<\/strong> de finalizaci\u00f3n de procesos, para notificar ese estado. Son funciones que se ejecutan cuando terminan otras. El uso intensivo de callbacks cuando programamos de forma as\u00edncrona produce un efecto de <strong>c\u00f3digo piramidal<\/strong>, no deseable,\u00a0llam\u00e1ndose\u00a0unas funciones a otras, y creando un c\u00f3digo\u00a0espagueti\u00a0 adentr\u00e1ndose unas funciones dentro de otras y siendo realmente\u00a0dif\u00edcil\u00a0de seguir, entender o interpretar.<\/p>\n<p style=\"text-align: justify;\">Este efecto se puede solucionar haciendo un esfuerzo para estructurar nuestro c\u00f3digo fuente, modularizando las funciones.<\/p>\n<p style=\"text-align: justify;\">La programaci\u00f3n orientada a eventos es algo t\u00edpico en javascript, pero en node es algo diferente. En javascript tenemos objetos &#8220;window&#8221; y &#8220;document&#8221; pero en node no existen, ya que estamos al lado del servidor.<\/p>\n<p style=\"text-align: justify;\">Los eventos del lado del servidor son distintos, alg\u00fan ejemplo:<\/p>\n<p style=\"text-align: justify;\">uncaughtError -&gt; Se genera cuando se produce un error y el proceso no puede continuar<\/p>\n<p style=\"text-align: justify;\">data-&gt; Cuando nos llegan datos por stream o flujos.<\/p>\n<p style=\"text-align: justify;\">request-&gt; Cuando nos llegan datos por URL, similar a otros lenguajes como ASP.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/nodejs2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3710\" alt=\"nodejs2\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/nodejs2.png\" width=\"950\" height=\"582\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/nodejs2.png 950w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/nodejs2-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Algunos comandos NodeJS y Hola mundo<\/strong><\/p>\n<p style=\"text-align: justify;\">En la consola de node se pueden teclear mandatos Javascript.<\/p>\n<p style=\"text-align: justify;\">Ejemplo<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #660000; font-family: monospace; font-size: 11px; line-height: 18px; text-align: left; background-color: #e1e5ef;\">$ node\u00a0<\/span><br style=\"color: #660000; font-family: monospace; font-size: 11px; line-height: 18px; text-align: left; background-color: #e1e5ef;\" \/><span style=\"color: #660000; font-family: monospace; font-size: 11px; line-height: 18px; text-align: left; background-color: #e1e5ef;\">console.log(&#8220;hola mundo&#8221;);<\/span><\/p>\n<p style=\"text-align: justify;\">Muestra el mensaje Hola mundo en el terminal.<\/p>\n<p style=\"text-align: justify;\">Esta es la completa implementaci\u00f3n del &#8220;Hola Mundo&#8221; como un servidor HTTP en node.js:<\/p>\n<pre class=\"de1\" style=\"font-family: monospace; padding: 0px; border: 0px none white; color: #000000; background-color: #f9f9f9; line-height: 1.2em; font-size: 13px; margin-top: 0px; margin-bottom: 0px; background-image: none; vertical-align: top; text-align: start;\"><span class=\"kw1\" style=\"color: #000066; font-weight: bold;\">var<\/span> http <span class=\"sy0\" style=\"color: #339933;\">=<\/span> require<span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'http'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n\r\nhttp.<span class=\"me1\" style=\"color: #660066;\">createServer<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span>\r\n  <span class=\"kw1\" style=\"color: #000066; font-weight: bold;\">function<\/span> <span class=\"br0\" style=\"color: #009900;\">(<\/span>request<span class=\"sy0\" style=\"color: #339933;\">,<\/span> response<span class=\"br0\" style=\"color: #009900;\">)<\/span> <span class=\"br0\" style=\"color: #009900;\">{<\/span>\r\n    response.<span class=\"me1\" style=\"color: #660066;\">writeHead<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"nu0\" style=\"color: #cc0000;\">200<\/span><span class=\"sy0\" style=\"color: #339933;\">,<\/span> <span class=\"br0\" style=\"color: #009900;\">{<\/span><span class=\"st0\" style=\"color: #3366cc;\">'Content-Type'<\/span><span class=\"sy0\" style=\"color: #339933;\">:<\/span> <span class=\"st0\" style=\"color: #3366cc;\">'text\/plain'<\/span><span class=\"br0\" style=\"color: #009900;\">}<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n    response.<span class=\"me1\" style=\"color: #660066;\">end<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'Hola Mundo<span class=\"es0\" style=\"color: #000099; font-weight: bold;\">\\n<\/span>'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n  <span class=\"br0\" style=\"color: #009900;\">}<\/span>\r\n<span class=\"br0\" style=\"color: #009900;\">)<\/span>.<span class=\"me1\" style=\"color: #660066;\">listen<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"nu0\" style=\"color: #cc0000;\">8000<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n\r\nconsole.<span class=\"me1\" style=\"color: #660066;\">log<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'Servidor ejecut\u00e1ndose en http:\/\/localhost:8000\/'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span><\/pre>\n<p style=\"text-align: justify;\">El siguiente c\u00f3digo es un servidor TCP\u00a0simple\u00a0que escucha el puerto 7000 y hace un echo de &#8220;Hola&#8221; sobre la conexi\u00f3n:<\/p>\n<pre class=\"de1\" style=\"font-family: monospace; padding: 0px; border: 0px none white; color: #000000; background-color: #f9f9f9; line-height: 1.2em; font-size: 13px; margin-top: 0px; margin-bottom: 0px; background-image: none; vertical-align: top; text-align: start;\"><span class=\"kw1\" style=\"color: #000066; font-weight: bold;\">var<\/span> net <span class=\"sy0\" style=\"color: #339933;\">=<\/span> require<span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'net'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n\r\nnet.<span class=\"me1\" style=\"color: #660066;\">createServer<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span>\r\n  <span class=\"kw1\" style=\"color: #000066; font-weight: bold;\">function<\/span> <span class=\"br0\" style=\"color: #009900;\">(<\/span>stream<span class=\"br0\" style=\"color: #009900;\">)<\/span> <span class=\"br0\" style=\"color: #009900;\">{<\/span>\r\n    stream.<span class=\"me1\" style=\"color: #660066;\">write<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'hola<span class=\"es0\" style=\"color: #000099; font-weight: bold;\">\\r<\/span><span class=\"es0\" style=\"color: #000099; font-weight: bold;\">\\n<\/span>'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n\r\n    stream.<span class=\"me1\" style=\"color: #660066;\">on<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span> <span class=\"st0\" style=\"color: #3366cc;\">'end'<\/span><span class=\"sy0\" style=\"color: #339933;\">,<\/span>\r\n      <span class=\"kw1\" style=\"color: #000066; font-weight: bold;\">function<\/span> <span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span> <span class=\"br0\" style=\"color: #009900;\">{<\/span>\r\n        stream.<span class=\"me1\" style=\"color: #660066;\">end<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"st0\" style=\"color: #3366cc;\">'adios<span class=\"es0\" style=\"color: #000099; font-weight: bold;\">\\r<\/span><span class=\"es0\" style=\"color: #000099; font-weight: bold;\">\\n<\/span>'<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n      <span class=\"br0\" style=\"color: #009900;\">}<\/span>\r\n    <span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n\r\n    stream.<span class=\"me1\" style=\"color: #660066;\">pipe<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span>stream<span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span>\r\n  <span class=\"br0\" style=\"color: #009900;\">}<\/span>\r\n<span class=\"br0\" style=\"color: #009900;\">)<\/span>.<span class=\"me1\" style=\"color: #660066;\">listen<\/span><span class=\"br0\" style=\"color: #009900;\">(<\/span><span class=\"nu0\" style=\"color: #cc0000;\">7000<\/span><span class=\"br0\" style=\"color: #009900;\">)<\/span><span class=\"sy0\" style=\"color: #339933;\">;<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Eso es todo, una <strong>breve introducci\u00f3n a Node.js<\/strong><\/p>\n<p>Relacionado con el Motor V8, en comic \ud83d\ude09<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-3693 gallery-columns-3 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/introduccion-a-node-js\/v8-1\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/v8-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/introduccion-a-node-js\/v8-2\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/v8-2-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/introduccion-a-node-js\/v8-3\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/v8-3-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/introduccion-a-node-js\/v8-4\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2013\/03\/v8-4-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n\n<p>Salu2.<\/p>\n<p>Ampliaciones:<\/p>\n<p>Instalaci\u00f3n de Node en un servidor dedicado linux<\/p>\n<p>No sabemos la distro, pero asumiendo que sea una Debian-like (Debian, Ubuntu, Mint etc) os pongo como compilarlo desde fuentes.<\/p>\n<p>1. Dependencias<\/p>\n<p>sudo apt-get install g++ curl libssl-dev apache2-utils<\/p>\n<p>2.\u00a0\u00a0Instalar git para descarga del source<\/p>\n<p>sudo apt-get install git-core<\/p>\n<p>3. Clonar la repo<\/p>\n<p>sudo mkdir \/tmp\/compilarnode<br \/>\ncd \/tmp\/compilarnode<br \/>\nsudo git clone git:\/\/github.com\/ry\/node.git<\/p>\n<p>4. Instalar<\/p>\n<p>cd node<br \/>\n.\/configure<br \/>\nmake<br \/>\nsudo make install<\/p>\n<p>5. Comprobar que todo funciona correctamente<\/p>\n<p>node -v<\/p>\n<p>man node<\/p>\n<p>6. Para instalar paquetes y dependencias de node, existe una utilidad\u00a0llamada NPM (Node Package Manager), se instalala<\/p>\n<p>curl\u00a0<a href=\"http:\/\/npmjs.org\/install.sh\" target=\"_blank\">http:\/\/npmjs.org\/install.sh<\/a>\u00a0| sh<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js es una nueva tecnolog\u00eda bastante asombrosa y potente, pero al menos que seamos desarrolladores de Javascript, el proceso de aprendizaje puede ser un poco abrumador. Node.js es un entorno de programaci\u00f3n del lado del servidor (server-side) a diferencia de la ejecuci\u00f3n normal en el lado del cliente o navegador (client-side). Esta basado en lenguaje Javascript (que no tiene nada que ver con JAVA, ojo),\u00a0arquitectura\u00a0orientada a objetos, funcionamiento por eventos del servidor, basado en el motor V8. Este motor es de c\u00f3digo abierto y fue creado por Google, siendo su programador jefe Lars Bak. El motor V8 se ha programado en C++ y es usado por el navegador Google Chrome adem\u00e1s de otros sistemas como el browser del sistema Operativo Android. Sepamos algo m\u00e1s sobre NodeJS &#8230;<\/p>\n","protected":false},"author":1,"featured_media":3694,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[95,360,44,361],"class_list":["post-3693","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","tag-javascript","tag-node","tag-programacion-2","tag-v8"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/3693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=3693"}],"version-history":[{"count":22,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/3693\/revisions"}],"predecessor-version":[{"id":3701,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/3693\/revisions\/3701"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/3694"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=3693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=3693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=3693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}