Hace ya un tiempo que el creador de Hapi viene haciendo esfuerzos para poder dedicarle más tiempo al proyecto y poder seguir desarrollando este genial framework. Dentro de las muchas decisiones que se adoptaron, una de ellas fue el de “ordenar” la forma de distribuir hapi en npm.
Como ya vimos en el curso para instalar hapi era tan simple como hacer lo siguiente en la terminal
npm install hapi
Pero ahora hapi fue movido hacia su propia organización llamada hapi. Debido a esto ahora la forma de instalar hapi es la siguiente:
npm install @hapi/hapi
Si bien el nombre del package ha cambiado el API casi se ha mantenido igual. Si queremos hacer un hello world escribiríamos el siguiente código:
// El require ahora debe hacer referencia al nuevo nombre del packageconst Hapi = require('@hapi/hapi');
asyncfunctioninit() {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
path: '/',
method: 'GET',
handler: () => {
return'Hello World';
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
}
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
El equipo de Hapi ha desarrollado muchos otros packages que permiten extender las funcionalidades del framework, todos ellos han sido movidos a la nueva organización dentro de npm por lo que su uso también ha sido modificado. Por ejemplo si queremos agregar validaciones a nuestras rutas normalmente usamos Joi. Vamos a ver como debemos instalarlo ahora
npm install @hapi/joi
Al igual que con el framework el único cambio es el nombre de la organización al inicio @hapi/ mientras que su uso no sufre muchas alteraciones, veamos un ejemplo simple en el que validamos el parámetro name de una ruta
// notar el nombre del package con respecto al antiguoconst Joi = require('@hapi/joi');
server.route({
method: 'GET',
path: '/hello/{name}',
handler: function (request, h) {
return`Hello ${request.params.name}!`;
},
options: {
validate: {
params: Joi.object({
name: Joi.string().min(3).max(10)
})
}
}
});
En este caso validamos que nuestro parámetro name sea una cadena de texto con una longitud mínima de 3 y una máxima de 10.
Si ya tienes un proyecto con Hapi y tienes muchas referencias a sus módulos y cambiarlos te podría generar mucho tiempo puedes generar un alias en las dependencias de npm dentro del package.json para evitar dichas modificaciones.
"dependencies": {
"hapi": "npm:@hapi/[email protected]"
}
Ahora cada vez que hagas un require(‘hapi’) automaticamente se hará referencia a require(’@hapi/hapi’). Puedes repetir lo mismo con los otros módulos del universo de Hapi.
Conclusiones
En este tutorial vimos la nueva forma de instalar Hapi usando su nuevo nombre de package en npm.
También usamos npm alias package para evitar hacer cambios en el código hacia el nuevo nombre del package.
Saludos!