Bienvenidos sean a este post, hoy vamos a hablar sobre esta particularidad que no existe en este estandar.
Cuando hablamos de objetos inyectados son algunas de las propiedades que posee Javascrpt, especialmente CommonJS, y no existen dos especialmente utiles para nosotros en el estandar ES6 como son __dirname y __filename.
Cuando hablamos de CommonJS en este post vimos a estos dos objetos inyectados que nos fueron especialmente utiles para obtener la ubicacion (__dirname) y nombre del archivo (__filename) siendo este ultimo con su path completo, pero en este estandar tenemos una herramienta que nos permite definirlas, y este es import.meta.
import.meta es la unica meta-propiedad inyectada en los modulos del standar ES6, y en el caso de node.js solo posee un campo y este se llama url, el cual contendra el URL completa del archivo que se esta utilizando, vamos a crear un ejemplo para ver como generar estos dos objetos.
Para ello vamos a crear un nuevo archivo que llamaremos dir.mjs y le agregaremos el siguiente codigo:
dir.mjs
import { fileURLToPath } from 'url';
import { dirname } from 'path';
console.log("import.meta.url: " + import.meta.url);
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log("filename: " + __filename);
console.log("dirname: " + __dirname);
Primero importaremos un elemento del modulo url, recuerden que de esto hablamos en el post anterior, y en este caso importamos un metodo que se encargara de convertir el path del URL a un path normal, la siguiente importacion sera dirname del modulo path, el cual se encargara de obtener el directorio de un path, nuestro siguiente paso sera mostrar el valor de import.meta.url, despues definiramos dos constantes, la primera sera __filename y en esta almacenaremos el resultado del metodo fileURLToPath en import.meta.url, la siguiente constante sera __dirname y en ella almacenaremos el resultado del metodo dirname sobre la constante anterior, despues mostraremos los valores de las dos constantes definidas anteriormente, veamos como es su salida:
$ node dir.mjs
import.meta.url: file:///home/tinchicus/lenguajes/node.js/dir.mjs
filename: /home/tinchicus/lenguajes/node.js/dir.mjs
dirname: /home/tinchicus/lenguajes/node.js
$
Observemos esta salida, primero vemos como es el valor de import.meta.url y es igual a como se ve cuando abrimos un archivo desde el navegador donde el protocolo es file, por esta razon debemos usar a fileURLToPath ya que debemos convertir este formato al de un path de S.O para que pueda ser manipulado por el metodo dirname, observen como la salida es el formato de un S.O y este es muy similar a lo visto en este post, es decir que no exista en este estandar no significa que no podamos hacer algo similar, en el proximo post hablaremos sobre estos dos estandar nuevamente pero sera una sorpresa.
En resumen, hoy hemos visto dos objetos inyectados de CommonJS que no estan en ES6. hemos visto como poder crearlos y como utilizarlos, espero les haya sido de utilidad 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
