Prácticas

Práctica 01

El objetivo es presentar algunas características del interprete de Node.js: node.

Crea el directorio $HOME/code/nodejs/node01, ingresa a él y crea el archivo .node-version para indicar a nodenv la versión de Node.js a usar :

antonio@servidor:~ $ mkdir -p $HOME/code/nodejs/node01
antonio@servidor:~ $ cd $HOME/code/nodejs/node01
antonio@servidor:~/code/nodejs/node01 $ echo node-v6.11.2-linux-x64 > .node-version

Puedes verificar el uso de .node-version por parte de nodenv con nodenv version.

  • Para acceder al interprete o iniciar sesión en el interprete de Node.js y poder ejecutar alguna instrucción de JavaScript: node, node -i o bien node --interactive.
  • Para salir del interprete se ejecuta .exit.
  • Para evaluar código de JavaScript desde el shell, node --eval y node --print:

     alumno@servidor:~ $ node --eval 'console.log("¡Hola mundo!")'
     ¡Hola mundo!
     alumno@servidor:~ $  node --eval 'console.log(console)'
     Console {
       log: [Function: bound ],
       info: [Function: bound ],
       warn: [Function: bound ],
       error: [Function: bound ],
       dir: [Function: bound ],
       time: [Function: bound ],
       timeEnd: [Function: bound ],
       trace: [Function: bound trace],
       assert: [Function: bound ],
       Console: [Function: Console] }
    
  • Para obtener una lista de las opciones disponibles en V8 (el motor de ejecución de JavaScript en Node.js): node --v8-options.

    Posiblemente la opción más sobresaliente sea --harmony (sinónimo de --es_staging) que permite activar las características aún pendientes de ser consideradas estables para el soporte de ECMAScript 2015.

     alumno@servidor:~ $ node --harmony --use_strict --eval 'let f = function() { return "¡Hola mundo!"; }; console.log(f());'
     ¡Hola mundo!
    
  • Una vez en el interprete de Node.js puedes hacer uso del comando .help para obtener una lista de comandos propios del interprete:

    • .break o .clear: para detener la captura de código de JavaScript en el interprete.
    • .exit: salir del interprete y regresar el shell.
    • .save archivo.js: guarda la actual sesión del interprete en archivo.js. La sesión puede ser cargada o restaurada con .load.
    • .load archivo.js: carga archivo.js en la actual sesión del interprete.

Práctica 02

  1. Crea un directorio donde residirá tu proyecto, por ejemplo $HOME/code/nodejs/node02, y en él configura la versión de Node.js a usar:

     alumno@servidor:~ $ mkdir -p $HOME/code/nodejs/node02
     alumno@servidor:~ $ cd $HOME/code/nodejs/node02
     alumno@servidor:~/code/nodejs/node02 $ echo node-v6.11.2-linux-x64 > .node-version
     alumno@servidor:~/code/nodejs/node02 $ nodenv version
     node-v6.11.2-linux-x64 (set by /home/alumno/code/nodejs/node02/.node-version)
    
  2. Inicializa el proyecto con npm init:

     alumno@servidor:~/code/nodejs/node02 $ npm init --yes
    

    Ante esto se creará el archivo package.json:

     {
       "name": "node02",
       "version": "1.0.0",
       "description": "",
       "main": "index.js",
       "scripts": {
         "test": "echo \"Error: no test specified\" && exit 1"
       },
       "keywords": [],
       "author": "",
       "license": "ISC"
     }
    
  3. Crea el archivo index.js con el siguiente contenido:

     exports.amap = function(f, xs) {
       var ys = [];
       for (var i = 0; i < xs.length; i++) {
         ys.push(f(xs[i]));
       }
       return ys;
     };
    
     exports.afilter = function(f, xs) {
       var ys = [];
       for (var i = 0; i < xs.length; i++) {
         if (f(xs[i])) {
           ys.push(f(xs[i]));
         }
       }
       return ys;
     };
    
     exports.areduce = function(f, a, xs) {
       var b = a;
       for (var i = 0; i < xs.length; i++) {
         b = f(b, xs[i]);
       }
       return b;
     };
    
  4. Inicia el REPL con el comando node y carga el módulo:

     alumno@servidor:~/code/nodejs/node02 $ node
     > var node02 = require('./index.js');
     undefined
     > node02.amap( function(x) { return [(x - 1), x, (x + 1)]; }, [3, 4, 5] );
     [ [ 2, 3, 4 ], [ 3, 4, 5 ], [ 4, 5, 6 ] ]
     > node02.afilter( function(x) { return x % 2 === 0; }, [3, 4, 5] );
     [ 4 ]
     > node02.areduce( function(x, y) { return x * y; }, 1, [3, 4, 5] );
     60