ES6 - Módulos
Introducción
Considere un escenario en el que es necesario reutilizar partes del código JavaScript. ES6 viene a tu rescate con el concepto de Modules.
Un módulo organiza un conjunto relacionado de código JavaScript. Un módulo puede contener variables y funciones. Un módulo no es más que un fragmento de código JavaScript escrito en un archivo. De forma predeterminada, las variables y funciones de un módulo no están disponibles para su uso. Las variables y funciones dentro de un módulo deben exportarse para que se pueda acceder a ellas desde otros archivos. Los módulos en ES6 funcionan solo enstrict mode. Esto significa que las variables o funciones declaradas en un módulo no serán accesibles globalmente.
Exportar un módulo
La palabra clave export se puede utilizar para exportar componentes en un módulo. Las exportaciones de un módulo se pueden clasificar de la siguiente manera:
- Exportaciones nombradas
- Exportaciones predeterminadas
Exportaciones nombradas
Las exportaciones denominadas se distinguen por sus nombres. Puede haber varias exportaciones con nombre en un módulo. Un módulo puede exportar componentes seleccionados usando la sintaxis que se proporciona a continuación:
Syntax 1
//using multiple export keyword
export component1
export component2
...
...
export componentN
Syntax 2
Alternativamente, los componentes de un módulo también se pueden exportar usando una sola palabra clave de exportación con {} sintaxis de enlace como se muestra a continuación:
//using single export keyword
export {component1,component2,....,componentN}
Exportaciones predeterminadas
Los módulos que necesitan exportar solo un valor pueden usar exportaciones predeterminadas. Solo puede haber una exportación predeterminada por módulo.
Syntax
export default component_name
Sin embargo, un módulo puede tener una exportación predeterminada y varias exportaciones con nombre al mismo tiempo.
Importar un módulo
Para poder consumir un módulo, utilice el import keyword. Un módulo puede tener múltiplesimport statements.
Importación de exportaciones con nombre
Al importar exportaciones con nombre, los nombres de los componentes correspondientes deben coincidir.
Syntax
import {component1,component2..componentN} from module_name
Sin embargo, al importar exportaciones con nombre, se les puede cambiar el nombre mediante la palabra clave as. Utilice la sintaxis que se indica a continuación:
import {original_component_name as new_component_name }
Todas las exportaciones con nombre se pueden importar a un objeto usando el asterisco * operator.
import * as variable_name from module_name
Importación de exportaciones predeterminadas
A diferencia de las exportaciones con nombre, una exportación predeterminada se puede importar con cualquier nombre.
Syntax
import any_variable_name from module_name
Ejemplo: exportaciones con nombre
Step 1 - Cree un archivo company1.js y agregue el siguiente código -
let company = "TutorialsPoint"
let getCompany = function(){
return company.toUpperCase()
}
let setCompany = function(newValue){
company = newValue
}
export {company,getCompany,setCompany}
Step 2- Crea un archivo company2.js. Este archivo consume componentes definidos en el archivo company1.js. Utilice cualquiera de los siguientes enfoques para importar el módulo.
Approach 1
import {company,getCompany} from './company1.js'
console.log(company)
console.log(getCompany())
Approach 2
import {company as x, getCompany as y} from './company1.js'
console.log(x)
console.log(y())
Approach 3
import * as myCompany from './company1.js'
console.log(myCompany.getCompany())
console.log(myCompany.company)
Step 3 - Ejecutar los módulos usando un archivo HTML
Para ejecutar ambos módulos, necesitamos crear un archivo html como se muestra a continuación y ejecutarlo en el servidor en vivo. Tenga en cuenta que debemos usar elattribute type="module" en la etiqueta de script.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script src="./company2.js" type="module"></script>
</body>
</html>
La salida del código anterior será como se indica a continuación:
TutorialsPoint
TUTORIALSPOINT
Exportación predeterminada
Step 1 - Crea un archivo company1.js y agregue el siguiente código -
let name = 'TutorialsPoint'
let company = {
getName:function(){
return name
},
setName:function(newName){
name = newName
}
}
export default company
Step 2 - Crea un archivo company2.js. Este archivo consume los componentes definidos en el archivo company1.js.
import c from './company1.js'
console.log(c.getName())
c.setName('Google Inc')
console.log(c.getName())
Step 3 - Ejecuta el modules usando un HTML file
Para ejecutar ambos módulos, necesitamos crear un archivo html como se muestra a continuación y ejecutarlo en el servidor en vivo. Tenga en cuenta que debemos usar elattribute type="module" en la etiqueta de script.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script src="./company2.js" type="module"></script>
</body>
</html>
La salida del código anterior será la que se menciona a continuación:
TutorialsPoint
Google Inc
Ejemplo: combinación de exportaciones predeterminadas y denominadas
Step 1 - Crea un archivo company1.js y agregue el siguiente código -
//named export
export let name = 'TutorialsPoint'
let company = {
getName:function(){
return name
},
setName:function(newName){
name =newName
}
}
//default export
export default company
Step 2 - Crea un archivo company2.js. Este archivo consume los componentes definidos en elcompany1.jsarchivo. Importe la exportación predeterminada primero, seguida de las exportaciones con nombre.
import c, {name} from './company1.js'
console.log(name)
console.log(c.getName())
c.setName("Mohtashim")
console.log(c.getName())
Step 3 - Ejecutar los módulos usando un archivo HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script src="company2.js" type="module"></script>
</body>
</html>
La salida del código anterior será como se muestra a continuación:
TutorialsPoint
TutorialsPoint
Mohtashim