‫Jonas: En esta conferencia quiero
‫mostrarles un par de cosas diferentes que involucran módulos.
‫Y quiero comenzar básicamente por demostrarles que Node,
‫de hecho, envuelve el código de nuestros módulos en una
‫función contenedora, como les
‫mostré en la última lección.
‫Así que creemos un nuevo archivo de nuevo, module. js, y
‫esos son módulos, como este.
‫De acuerdo, y lo
‫que voy a hacer aquí es registrar los argumentos en la consola, ¿de acuerdo?
‫Entonces, los argumentos son una matriz en JavaScript, y
‫esta matriz contiene todos los
‫valores que se pasaron a una función.
‫Entonces, cuando registro esta matriz de argumentos en la
‫consola, si realmente vemos algunos valores
‫allí, bueno, entonces significa que realmente estamos en una función, ¿de acuerdo?
‫Entonces, ejecutemos módulos.
‫Y de hecho, aquí tenemos el código en nuestros argumentos.
‫Y recordemos los cinco argumentos de
‫la función contenedora.
‫El primero es la exportación, entonces este, que
‫actualmente está
‫vacío porque no estamos exportando nada.
‫La segunda es la función require, por lo
‫que podemos
‫ver que aquí tenemos la función require.
‫Entonces el tercero se llama módulo, está bien.
‫Y en el módulo tenemos las exportaciones de módulos, de
‫las que nuevamente hablamos en la última conferencia.
‫Y lo que tenemos aquí no es tan importante, de nuevo,
‫solo quería mostrarles
‫que en realidad estamos en una función en este momento,
‫de modo que todo este código que
‫tenemos en este módulo está envuelto en esta función contenedora, de acuerdo. ?
‫Luego, el número tres y el número cuatro son el nombre del
‫archivo y el nombre del directorio.
‫Y de hecho, este es el nombre del módulo en el que estamos
‫actualmente, entonces módulos. js.
‫Y luego aquí tenemos el nombre del directorio.
‫Entonces estoy en mi
‫escritorio, y luego en esta carpeta de trabajos de Nodo.
‫Muy similar a este de
‫aquí, pero luego este tiene el nombre del módulo con una barra, ¿de acuerdo?
‫Entonces eso nos prueba que,
‫de hecho, todo el código dentro de
‫un módulo está empaquetado, y que tenemos acceso a todas
‫estas variables, entonces estos argumentos, ¿de acuerdo?
‫Así que considero que este es un experimento
‫interesante que podemos hacer.
‫Y de hecho podemos hacer otra cosa interesante.
‫Entonces, para mostrarle realmente la función
‫de envoltura, podemos requerir el módulo del módulo, está bien.
‫Entonces, hay un módulo llamado
‫módulo, que en realidad nunca usamos, pero que Node lo usa internamente.
‫Y ahí tenemos el envoltorio.
‫Y esa es en realidad esta propiedad es
‫en realidad la función contenedora.
‫Así que ahora podemos echarle un vistazo.
‫¿Y dónde está eso, ah, sí?
‫Entonces aquí, aquí está en realidad.
‫Entonces esta es la función contenedora.
‫Y entonces, de hecho, verá export, require,
‫module, filename y directory name, y luego el cuerpo
‫de la función.
‫Y esto es lo que Node
‫usa internamente, así que básicamente esta plantilla aquí, la
‫usa y luego llena el cuerpo de esta función con nuestro código.
‫De acuerdo, de nuevo, solo un experimento interesante aquí.
‫Ahora, lo más importante que
‫quiero mostrarles aquí es cómo podemos exportar e
‫importar datos de un módulo al otro.
‫Entonces, comencemos creando un nuevo módulo aquí, en el
‫que voy a crear una calculadora,
‫un poco como mencioné en el último video.
‫Así que llamémoslo test-module-1, porque vamos a tener
‫un par de ellos.
‫Y aquí voy a crear una clase de calculadora.
‫De nuevo, esta es la sintaxis
‫de ES6 de clases de escritura en JavaScript.
‫Así que agreguemos un par de métodos aquí, así
‫que agreguemos ayb, por supuesto, devolverá a más
‫b, así que cosas muy simples, multiplique a, b, devolverá a por
‫b, y luego, simplemente dividamos también, solo
‫en aras
‫de la integridad aquí, a, b, como este.
‫Guárdelo, lo formatea muy bien y ahora
‫podemos hacer el módulo. exporta, tal como aprendimos en
‫el último video,
‫y estamos exportando nuestra calculadora, ¿de acuerdo?
‫Entonces, nuevamente, usamos module. exporta
‫cuando queremos exportar un solo valor.
‫Y en este caso, nuestro único
‫valor aquí es la clase de calculadora.
‫Entonces módulo. Las exportaciones son exactamente
‫lo que se devuelve de un módulo, por lo que
‫lo que ponemos allí, bueno, se exporta automáticamente, ¿verdad?
‫Luego podemos guardar el valor
‫exportado en una variable al importarlo, así que hagámoslo ahora.
‫Y ahora aquí podemos darle el nombre que queramos.
‫Entonces, el nombre que estamos exportando en el otro lado, en
‫este otro módulo, no importa.
‫Podemos llamarlo como queramos aquí.
‫Entonces, en ese sentido, es como el retorno de una función
‫normal, ¿verdad? Por lo tanto, siempre podemos
‫devolver cualquier variable, pero luego llamarla
‫de otra manera cuando básicamente guardamos el resultado de una función
‫en una variable, ¿verdad?
‫Entonces, dado que es nuestro
‫propio módulo, tenemos que usar la barra de puntos, así que lo
‫que hice aquí, y luego test-module-1.
‫Y el JS, recuerda, podemos dejar eso, no
‫es necesario, ¿de acuerdo?
‫Y entonces esta variable C aquí, que está en
‫mayúsculas porque para la clase usualmente siempre usamos nombres en mayúsculas.
‫Y recuerde, en realidad estamos exportando una clase aquí.
‫Bien, ahora podemos usar esa clase para hacer algunos cálculos.
‫Entonces, primero que nada, creemos una
‫nueva calculadora, una calculadora, porque luego
‫tendremos otra, ¿de acuerdo?
‫Y ahora creamos una nueva instancia de una calculadora como
‫esta, y esto no debería
‫ser nada nuevo para usted en este momento.
‫Y luego registremos a través de la consola el
‫resultado de usar esto realmente.
‫Entonces calc1. agregue, y digamos dos y cinco.
‫Salvarlo y, de hecho, comentemos estos dos.
‫Guárdelo de nuevo, luego los módulos de nodo, y
‫aquí tenemos el resultado, siete.
‫Así que son dos más cinco, así que funciona, ¿verdad?
‫Y aquí, en nuestro módulo
‫de prueba, podríamos hacerlo de una manera más elegante.
‫Entonces podríamos asignar esta clase aquí
‫directamente al módulo. exportaciones, ¿verdad?
‫Así que ahora mismo tenemos una declaración de clase,
‫así que es un poco como
‫una declaración de función, donde decimos calculadora de funciones, y luego
‫esto, y aquí decimos clase, ¿de acuerdo?
‫Pero también podríamos hacerlo con una expresión de clase.
‫Y así, simplemente no usamos el nombre de la
‫calculadora de todos modos.
‫Así que cópielo, coméntelo.
‫Está bien, así que así.
‫Entonces solo decimos que esta es
‫una clase y luego la asignamos a una variable.
‫Y eso es ahora una expresión.
‫Así que ejecutemos esto de
‫nuevo y, por supuesto, volveremos a ver nuestro siete, ¿de acuerdo?
‫Entonces, nuevamente, esto es solo para asignar inmediatamente el valor
‫que queremos modular. exportaciones, y eso
‫nos ahorrará algunas líneas de código y probablemente
‫hará que nuestro código se vea un poco mejor.
‫Bien, así es como exportamos cosas con module. exportaciones, y ahora veamos
‫cómo y cuándo podemos usar la abreviatura de
‫exportaciones que también mencioné en el
‫video anterior.
‫Así que creemos un simple comentario aquí, módulo. Exportaciones.
‫Entonces aquí solo exportaciones.
‫Entonces, una nueva prueba de módulo, y nuevamente, módulo-2. js.
‫Y entonces la alternativa para hacer module. exportaciones es agregar
‫propiedades al objeto de exportación en sí.
‫Entonces podríamos hacerlo
‫así, y usando nuevamente el ejemplo de la calculadora
‫de antes, podríamos hacerlo así.
‫Entonces, simplemente podemos agregar propiedades al objeto de exportación.
‫Entonces ayb devolverán a más
‫b, exportaciones. multiplique a, b devolverá a por
‫b, y
‫ahora simplemente dupliquemos solo para completar de nuevo, y está bien.
‫Así que creamos básicamente tres funciones
‫anónimas aquí, estas tres,
‫y las asignamos a tres propiedades de exportaciones.
‫Y ahora, cuando exportamos este módulo en el otro
‫lado, también en módulos. js, básicamente obtendremos
‫acceso a este objeto de exportación.
‫Así que déjame mostrarte eso.
‫Digamos que const calc2 es obligatorio.
‫Nuevamente, no olvide el punto y la barra,
‫porque es nuestro propio módulo.
‫Bien, y ahora este calc2 aquí es el objeto de exportación.
‫Bien, déjame mostrarte eso.
‫Consola. log, calc2. sumar, dos y cinco.
‫Entonces eso debería darnos exactamente el mismo resultado que antes.
‫Y de hecho, aquí están nuestros siete, como antes.
‫Y si
‫multiplicamos, entonces eso debería ser, por supuesto, 10.
‫Y sí, tenemos siete aquí de la suma aquí, y
‫luego esta multiplicación nos da 10.
‫Así que espero que esto realmente marque
‫la diferencia entre module. exportaciones y exportaciones claras.
‫Y nuevamente, cuando usamos exportaciones simples, podemos
‫agregar cosas a este objeto, entonces básicamente propiedades, y luego
‫cuando importamos eso, cuando necesitamos
‫este módulo, el resultado que
‫obtendremos es
‫un objeto que contiene todas estas propiedades.
‫Y como estamos obteniendo un
‫objeto, podemos usar el poder de la desestructuración de ES6
‫para hacer algo de magia genial aquí, básicamente.
‫Así que déjame deshacerme de este, o
‫duplicarlo, comentar este, y así podemos usar la
‫desestructuración para desestructurar el objeto que obtenemos, ¿de acuerdo?
‫Y funciona así, por lo que usamos las llaves y
‫luego simplemente creamos nombres
‫de variables para las propiedades en ese objeto.
‫Entonces, nuevamente, usemos sumar, multiplicar y dividir.
‫Entonces esos son los nombres que realmente tenemos en
‫este objeto de exportación.
‫Entonces, agregue, multiplique y divida, y
‫estos deben tener exactamente el mismo nombre
‫que en el objeto original, ¿de acuerdo?
‫Ahora, lo que hará
‫es que básicamente creará una variable llamada
‫simplemente multiplicar.
‫Y así, de hecho, aquí está nuestro resultado.
‫Y en realidad solo podemos importar los que queramos.
‫Entonces, digamos que solo queremos sumar y multiplicar, ¿de acuerdo?
‫Y así solo tendremos acceso a estos
‫dos, en lugar de importar todo desde el módulo.
‫Y este es un patrón
‫bastante común que verá utilizado en Node,
‫y lo haremos a lo largo del proyecto también.
‫Bien, en este
‫video hablamos sobre la función de
‫envoltura aquí, luego hablamos sobre exportar
‫e importar usando el módulo. las exportaciones y las exportaciones taquigráficas.
‫Y ahora, finalmente, para terminar,
‫hablemos sobre el almacenamiento en caché muy rápidamente.
‫Bien, creemos el módulo de prueba 3 aquí.
‫Y lo que voy a hacer aquí es crear una consola. log, así que básicamente
‫algún código de nivel superior dentro de este módulo.
‫Hola desde el módulo, está bien, y
‫luego también quiero exportar una función.
‫Solo una función, y por eso digo módulo. exportaciones es
‫igual a función sin ningún argumento, uno que
‫simplemente iniciará sesión en
‫la consola: registre este hermoso texto.
‫Solo algunos pequeños emoji aquí para hacer que resalte un poco.
‫Bien, ahora exijamos este módulo de prueba.
‫Test-module-3, y no lo guardaré en ninguna variable.
‫En su lugar, voy a llamar a la función
‫de inmediato sin guardarla en una variable.
‫Entonces, por supuesto, podríamos hacer
‫eso, luego tendríamos la función en una variable,
‫y luego podríamos llamarla.
‫Pero esto es exactamente
‫lo mismo, porque esto devolverá esta función que definimos,
‫así que esta de aquí, ¿verdad?
‫Devolverá esto porque estamos usando module. exportaciones, y luego
‫de inmediato llamamos a esta función aquí, ¿de acuerdo?
‫Así que, de hecho, hagámoslo tres veces.
‫Y teniendo en cuenta que tenemos almacenamiento en caché en Node. js, ¿qué crees
‫que sucederá cuando ejecutemos este código?
‫Bien, ejecutemos esto y veamos qué va a pasar.
‫Aquí tenemos el resultado, hola desde
‫el módulo, y luego registramos tres veces este hermoso texto.
‫Así que tenemos este registro aquí tres veces, bueno, porque
‫llamamos a la misma función tres veces.
‫Pero tenemos un saludo del módulo solo una vez, ¿de acuerdo?
‫Y eso se debe al almacenamiento en caché.
‫Entonces, técnicamente, este módulo solo se cargó una vez, por
‫lo que el código dentro de él también se ejecutó una sola vez.
‫Y es por eso que esta línea de
‫código aquí, este registro solo se ejecutó una vez, ¿de acuerdo?
‫Entonces, estos otros dos registros aquí, bueno, vinieron de la
‫caché, por lo que se almacenaron en algún lugar de
‫la caché de procesos del Nodo.
‫Y una vez que llamamos a la función aquí por
‫segunda vez, simplemente se recuperó
‫desde allí, en lugar de cargar el módulo nuevamente, ¿de acuerdo?
‫Así que estoy seguro de que eso tiene mucho sentido para ti.
‫Y esa fue nuestra conferencia, en realidad.
‫Si tiene alguna pregunta, puede, como siempre,
‫publicarla en la sección de preguntas y respuestas y obtendrá ayuda allí.
‫Así que termina toda esta sección.
‫Sé que fue todo un viaje hasta que llegamos a este punto,
‫así que hay muchas cosas que asimilar.
‫Y si corrigió todo al 100%, no
‫se preocupe demasiado por eso, porque
‫a lo largo
‫del curso, la mayoría de las cosas se aclararán eventualmente, ¿de acuerdo?
‫Así que no te preocupes, sigue avanzando en el curso y
‫te veré en la siguiente sección.