1. ¿CÓMO FUNCIONA NODEJS?
2. ¿CÓMO TRABAJA EL COMPILADOR V8?
WASM
GC
Liftoff
Orinoco
2. ¿CÓMO TRABAJA EL COMPILADOR V8?
node --print-bytecode app.js
3. ¿CÓMO FUNCIONA EL EVENT LOOP?
refs > 0
refs == 0
4. ¿CÓMO DEPURAR APLICACIONES NODE?
Chrome DevTools
node --inspect=0.0.0.0:9229 server.js
4. ¿CÓMO DEPURAR APLICACIONES NODE?
NDB
// Instalado como dependencia local
npm install --save-dev ndb
// Use ndb en lugar del comando 'node'
ndb server.js
// Si usa algún otro binario
// simplemente anteceder con `ndb`
ndb npm run unit
// Depurar algún paquete instalado globalmente
ndb mocha
// Para usar un binario local,
// use `npx` y anteceda ndb a él
ndb npx mocha
// Lanzar ndb como aplicación principal
// y luego depurar algún script del
// package.json, e.g. unit tests
ndb .
5. ¿CÓMO HACER LOGGING?
6. MANTENIMIENTO EN PRODUCCIÓN
Crear un endpoint (asegurado) de mantenimiento en producción para:
7. CORRIENDO EL SERVIDOR
En desarrollo:
npm install -g nodemon
nodemon ./server.js localhost 8080
nodemon --watch app app/server.js
En producción:
npm install -g pm2
// Fork mode
pm2 start app.js --name my-api
// Cluster mode (max instances)
pm2 start app.js -i 0
pm2 monit
pm2 list
pm2 stop 0
pm2 restart 0
systemd
👌🏻!!!
8. OPTIMIZACIONES EN PRODUCCIÓN
// start.sh
NODE_ENV=production pm2 start index.js
9. +
npm install --save-dev ts-node
npx ts-node
// También hay una versión de jasmine con TS
npm install --save-dev jasmine-ts
Tip: Cuando se use un transpilador, también subir el código JS resultante al repo para evitar el primer build.
10. ++
// Instalar "package"
npm i package
npm i package --verbose // Más información
// Correr "npm test"
npm t
// Atajo para --save-prod (Antes de v.10 era -S)
npm i react -P
// Atajo para --save-dev
npm i morgan -D
// Buscar en el repositorio
npm search lodash
// Listar paquetes globales
npm ls -g depth=0
// "Podar" paquetes huérfanos
npm prune
11. ++ (scripts)
Anteceder "pre" o "post" a cualquier script común
o personalizado es válido:
"scripts": {
"preinstall": "node prepare.js",
"postintall": "node clean.js",
"build": "webpack",
"postbuild": "node index.js",
"postversion": "npm publish",
"myscript": "node myscript.js",
"postmyscript": "node clean.js"
}
12. MODULARIZACIÓN
CommonJS:
// In circle.js
const PI = Math.PI;
exports.area = (r) => PI * r * r;
exports.circumference = (r) => 2 * PI * r;
// In some file
const circle = require('./circle.js');
console.log( `The area of a circle of radius 4 is ${circle.area(4)}`);
12. MODULARIZACIÓN
ES Modules
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
//------ main.js ------
import { square, diag } from 'lib';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
System.import('some_module')
.then(some_module => {
// Use some_module
})
.catch(error => {
// ...
});
Dynamic Loading
ADVERTENCIA: característica experimental de la v.12
// package.json
{
"type": "module"
}
// En la misma carpeta
// del package.json correr
node --experimental-modules my-app.js
12. MODULARIZACIÓN
SystemJS
<script src="system.js"></script>
<script>
// Configurar la ruta de referencia baseURL
System.config({
baseURL: '/app',
// o 'traceur' o 'typescript'
transpiler: 'babel',
// o traceurOptions o typescriptOptions
babelOptions: {
}
});
// Carga /app/main.js
System.import('main.js');
</script>
Soporta todos los tipos de módulos: CommonJS, AMD y ES 2015
13. ESTRUCTURA DE ARCHIVOS
14. EL MARAVILLOSO MUNDO DE
15. COMUNICACIONES EN TIEMPO REAL
PRIMUS
No hay ports estables para la mayoría de lenguajes de tipado fuerte (C#, Java)
Modularizar la librería para el cliente es un tema que posee una complejidad importante.
16. SOPORTAR VARIAS VERSIONES DE NODE
n:
nvm:
17. SOPORTAR MÚLTIPLES REPOSITORIOS
nrm
npm install -g nrm
nrm ls
/* Output:
* npm ----- https://registry.npmjs.org/
cnpm ---- http://r.cnpmjs.org/
taobao -- https://registry.npm.taobao.org/
nj ------ https://registry.nodejitsu.com/
skimdb -- https://skimdb.npmjs.com/registry
*/
nrm use cnpm //switch registry to cnpm
18. OPTIMIZACIÓN DE EVENTOS
19. PARALELISMO
20. TIPS DE SEGURIDAD
REFERENCIAS