Bienvenidos sean a este post, hoy continuaremos con los modulos.
Hasta ahora hemos visto como usar modulos de CommonJS o ES6 e inclusive hemos visto como utilizar desde uno hacia al otro, pero en todos los casos siempre nos manejamos con codigo pero en el caso de hoy en lugar de usar codigo usaremos datos y para ello sera mediante los archivos de tipo json, para poder importarlo node.js lo hace de la siguiente manera:
require('./path/al/archivo.json')
Si bien esto es como importar un archivo en un modulo CommonJS si debemos hacer una equivalencia sera la siguiente:
const fs = require('fs');
module.exports = JSON.parse(
fs.readFileSync('/path/al/archivo.json', 'utf8'));
En este caso el archivo sera leido de forma sincronica pero lo analizaremos mediante parse y lo pasaremos como tal, para entender el concepto vamos a analizar un ejemplo, para ello primero crearemos un archivo con el nombre de datos.json y le agregaremos los siguientes datos:
datos.json
{
"saludar": "Hola, Mundo!",
"valor": 42
}
Este sera un archivo simple que contendra dos valores para ser utilizados, es decir un archivo json en toda regla, en el mismo directorio crearemos un nuevo archivo con el nombre de codigo.js y le agregaremos el siguiente codigo:
codigo.js
const datos = require('./datos.json');
console.log(datos);
Primero tomaremos el archivo y lo asignaremos a un objeto para luego mostrarlo, ejecutemos para ver su salida:
$ node codigo.js
{ saludar: 'Hola, Mundo!', valor: 42 }
$
Tomemos el codigo anterior y realicemos la siguiente modificacion:
const datos = require('./datos.json');
console.log("Saludar = " + datos.saludar);
console.log("Valor = " + datos.valor);
Ahora en lugar de mostrar el objeto generado a partir de la importacion del archivo json mostraremos los dos valores que contenemos en este y en ambos casos identificandolos, veamos como es su salida:
$ node codigo.js
Saludar = Hola, Mundo!
Valor = 42
$
Obviamente esto es una vision muy simple de como importar datos desde un json mediante CommonJS pero ahora pasemos a hacerlo desde el punto de vista de ES6, para ello deben crear un archivo con el nombre de codigo.mjs y agregarle el siguiente codigo:
codigo.mjs
import datos from './datos.json' assert { type: 'json'};
console.log(datos);
En este caso usamos la palabra import para almacenar en datos el contenido del archivo json pero observen que agregamos assert para informarle el tipo de informacion y despues al igual que en el caso anterior mostramos el contenido, veamos que sucede:
tinchicus@dbn001vrt:~/lenguajes/node.js/1$ node codigo.mjs
(node:755) ExperimentalWarning: Import assertions are not a stable feature of the JavaScript language. Avoid relying on their current behavior and syntax as those might change in a future version of Node.js.
(Use `node --trace-warnings ...` to show where the warning was created)
{ saludar: 'Hola, Mundo!', valor: 42 }
(node:755) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
tinchicus@dbn001vrt:~/lenguajes/node.js/1$
Funciono? Bueno, si pero observen como nos notifica que usarlo de esta forma actualmente es experimental e inestable, por el momento se permite usarlo pero no quita que en proximas versiones deje de usarse, investigando un poco mas supuestamente con with deberia funcionar pero en mi caso no anduvo, o por lo menos con la version que trabajo, aunque esto no quita que seguire investigando sobre el tema y si encuentro como implementarlo actualizare la informacion, entonces como conclusion podemos decir que por el momento es mejor usarlo mediante CommonJS porque esta mejor implementado.
Nota: Al momento de crear este post estuve utilizando la version 20.6.1
En resumen, hoy hemos visto como importar modulos pero de tipo json, es decir que en lugar de utilizar codigo, usamos directamente los datos almacenados en este, tambien vimos como se importan primero desde CommonJS y luego ES6, y las diferencias de codigo y salida entre ambos, espero les haya resultado util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
