Construyendo módulos: Require e Import
Clase 21 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
Clase 21 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
Juan Esteban Deossa Pertuz
Guadalupe Giovanni Hernández Medina
Keiler Delgado
Jaime Navarro
Gisela Haag
Victor Garza
Jonathan Sánchez Luna
Daniela Funes
Rodrigo Hernández Leyva
Abdiel Ortega
Navel Peña
Edmundo Salamanca Villa
Jorge Luis Martínez Hernández
María Sierra
Jesús Miguel Quinto Teran
Juan Jiménez
Esteban Casallas
Sergio Brandon De Lucio Chavero
andrés eduardo betancourt bescanza
Jimmy Buriticá Londoño
Sneider Narvaez
Mariana Cortés
Gabriel Rodriguez
Carlos Ponce
Francisco Ponce
Juan Esteban Velez Loaiza
Wandy Rafael Santana Evangelista
Andres Ramirez Restrepo
Jimmy Buriticá Londoño
Javi Felices
Jaime Eduardo Falla Cardozo
Zaidibeth Ramos
Manuel Ojeda
Daniel Castiblanco
Camilo Andrés Granda Cortés
En Node tenemos una forma de importar módulos la cual es con el método require, el cual es la forma por defecto de importar módulos, ya sean nuestros propios módulos como los de otras personas en nuestros proyectos JS, pero suele haber mucha confusión debido al import. Import es la forma de importar módulos en Ecmascript, el cual es un estándar de JavaScript para la web, esta forma de importar en teoría Node no la acepta oficialmente, a no ser que usemos su modo de .mjs. Pero gracias a compiladores como Babel, nosotros podremos utilizar estas normas de Ecmascript en nuestro código para cuando se ejecute se transforme en código que sea aceptable por Node. Se recomienda en la mayoría de veces la importación con require.
Buen resumen 👍
Excelente! gracias por la info, esa era mi duda
en el presente ya no es experimental me funciona bien
Si! tal cual, tengo la version de node 14.15.1 y no me tira ningún error ;)
Es correcto corrí directamente nodemon index.mjs y se imprimió el resultado.
Para los que llegan a este curso a mediados de 2021 o más recientemente, los imports y exports en estándar ES6 ya están 100% soportados. A continuación les comparto un ejemplo realizado de ambos modos. ++FORMATO REQUIREJS:++ File: myOwnModule.js
function sayHello() { console.log('Hello from inside a function of myOwnModule.js'); } const property1 = 'Property 1 String value'; const property2 = 2; module.exports = {sayHello, property1, property2} };
File: index.js
const myOwnModule = require('./myOwnModule'); console.log(myOwnModule.property1); console.log('Property 2 value (number): ', myOwnModule.property2); myOwnModule.sayHello();
++FORMATO ECMASCRIPT 6:++ File: myOwnES6Module.mjs
function sayHello() { console.log('Hello from inside a function of myOwnES6Module.mjs'); } const property1 = 'Property 1 String value'; const property2 = 2; export default {sayHello,property1,property2};
File: index.mjs
import myOwnES6Module from './myOwnES6ModuleES6.mjs'; console.log(myOwnES6Module.property1); console.log('Property 2 value (number): ', myOwnES6Module.property2); myOwnES6Module.sayHello();
También se podría utilizar el operador de desestructuración para obtener las funciones y propiedades del módulo importado directamente en variables independientes, por ejemplo utiizando el primer ejemplo:
const { sayHello, property1, property 2 } = require('./myOwnModule.js');
Espero les sirva el aporte. Happy Coding!
Vine buscando cobre y conseguí oro, gracias!!!!! 😁
Gracias crack, excelente aporte.
También podemos usar el operador de reposo para importar los modulos
// Traer modulo const { saludar, prop } = require('./modulo'); // Ejecutar una función del modulo saludar(); console.log(prop);
cual es operador de reposo? gracias
Me parece que se refiere al { cosa } = require('./path)
A los {}
Node ya soporta los módulos de la sintáxis ES6 solo hay que agregar esta linea en el package.json "type": "module", quedaria algo asi el archivo
"name": "fundamentosnodejs", "version": "1.0.0", "description": "una descripción", "main": "index.js", "type": "module",
y con esto ya se podrá trabajar con los archivos en extencion .js en lugar de .mjs
Construyendo módulos: Require e Import
Pueden trabajarse los módulos así:
// Traer nuestro modulo const modulo = require('./modulo') // Ejecutar una función del modulo console.log(modulo) modulo.saludar() // modulo()
function saludar() { console.log(`Hola mundo!`) } module.exports = { saludar, prop1: 'hola k lo k es' }
🔥 El import de ES+6 todavía no viene incluido en Node.js, solo viene de forma experimental, en 2021 ya este no es experimental
import modulo from './modulo.mjs' modulo()
function saludar() { console.log(`Hola mundo!`) } export default saludar
Modulos
Para importar modulos propios o de terceros, debemos utilizar el require o import (import se considera experimental en versiones antiguas de node)
// Modulo
function suma(a, b) { return a + b}; function saludar(nombre) { return `Hola ${nombre}`} const PI = 3.14159264 module.exports = { suma, saludar, PI }
//Importación
const { suma, saludar, PI } = require(...path_module) suma(3,2) saludar('Jesuskinto') console.log(`Pi es un constante y su valor es: ${PI}`)
excelente, gracias !
Ya no se ve la imagen :'u
Con ES6 también puedes hacerlo de la siguiente forma.
export const bye = () => { console.log("Soy BYE y me fui de aqui"); };
import { bye } from "./modulo.mjs"; bye();
Gracias por la actualización.
Se llama export nombrado
Lo de construir módulos (y su sintaxis para llamarlos y exportarlos) me está recordando mucho como funciona React para el front. Se nota muchísimo que se basan en los mismos conceptos de JavaScript internos... me queda mucho más claro por qué en las clases del principio decían que NodeJS es un entorno de JavaScript!
Node ya soporta los módulos de la sintáxis ES6+ y pueden correr ++node index.mjs++ sin problemas ni warnings
._. A mí me funciono a la primera con el mjs, ¿Es porque ya es soportado?
Hola SrTager,
Desde las versiones +13 de Node ya es soportado con la extensión .mjs, todo avanza muy rápido antes no era tan fácil de hacerlo. Aunque es buena idea conocer cómo se hace con require ya que esa implementación es relativamente nueva, y estoy seguro que te encontrarás mucho código escrito con esa estructura.
Saludos desde 2022, ahora para usar el import en Node se debe agregar al package.json la siguiente propiedad:
"type": "module"
Y esto nos permite además de usar await fuera de funciones asíncronas (file: modulo/es6/index.js):
import modulo from './modulo.js'; await new Promise((resolve, reject) => { setTimeout(resolve, 1000, 'Hola mundo con await sin función asíncrona'); }).then(msg => console.log(msg)); modulo();
Si parece confuso, la explicación es sencilla, debido a que tenemos los módulos ES6 activados podemos hacer uso del await fuera de funciones asíncronas, y lo que pasa al ejecutar index.js es que esperamos se resuelva la promesa (y su then), y luego ejecutamos modulo.
Característica interesante 😆
Good News Devs, NodeJS a dia de hoy ya soporta los ++module.exports++, pueden verlo aqui: Click Aqui Tambien soportan los ++imports++: Click Aqui
Clase 20: Construyendo módulos - require e import
require se utiliza para consumir módulos. Nos permite incluir módulos integrados de Node.js, externos (como los importados de npm) y módulos locales.
const express = require('express');
export nos permite "exportar" sus objetos y métodos en modulos que pueden ser utilizados a lo largo de nuestro proyecto.
Cuando requerimos un modulo utilizando ./ indica que es un modulo que se encuentra local.
// modulo.js // vamos a declarar las funciones que vamos a exportar en el modulo. exports.por5 = numero => numero * 5; exports.por10 = numero => numero * 10; // multiplicador.js // Importamos el modulo.js y llamamos las funciones const multiplicador = require('./modulo.js'); const numero = 10; console.log(multiplicador.por5(numero)); // 50 console.log(multiplicador.por10(numero)); // 100
Te actualizo el código a ES6
// modulo.mjs // vamos a declarar las funciones que vamos a exportar en el modulo. export function por5(numero) { return numero * 5; } export function por10(numero) { return numero * 10; }
// multiplicador.mjs // Importamos el modulo.js y llamamos las funciones import { por5, por10 } from './modulo.mjs'; const numero = 10; console.log(por5(numero)); // 50 console.log(por10(numero)); // 100
A día de hoy, 17 de Septiembre de 2021.
Añadir en el fichero package.json, "type": "module"
package.json
{ "name": "funda-node", "version": "1.0.0", "description": "Cursos de Fundamentos de Node.js", "main": "src/index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, .... "author": "Javi Felices @javifelices, "license": "MIT", ... }
modulo.js
const saludar = () => console.log('Hola mundo'); export default { saludar, prop1: 'Hola que tal', };
index.js
import modulo from './modulo.js'; console.log(modulo.prop1); modulo.saludar();
Un saludo y gracias.
Creo que este curso deberían actualizarlo.
Las acciones hechas por el profesor hasta el minuto 7:20 con archivos .mjs son soportadas con node 16.16.0 en la actualidad, ya no hay un crash respecto al
modulo.mjs
function saludar(){ console.log('Holis') } export default saludar
index.mjs
import modulo from './modulo.mjs' modulo()
A fecha de hoy con la versión LTS Node 16, los mjs ya son soportados sin ser experimental ✌
Que bueno ver este comentario aclara mi duda de por que me funciona. jajaja
Con ES6
agregar "type": "module", en el package.json
Creamos nuestros modulos
importamos desde el index.js
Ejecutamos con node o con nodeamon