tutorial smart remix español curso aprender module export ecmascript-6

module - smart - solidity español



ES6 exporta todos los valores del objeto (9)

Digamos que tengo un módulo ( ./my-module.js ) que tiene un objeto que debería ser su valor de retorno:

let values = { a: 1, b: 2, c: 3 } // "export values" results in SyntaxError: Unexpected token

Entonces puedo importarlos como:

import {a} from ''./my-module'' // a === 1 import * as myModule from ''./my-module'' // myModule.a === 1

La única forma que encontré es codificando las exportaciones:

export let a = values.a export let b = values.b export let c = values.c // or: export let {a, b, c} = values

Lo cual no es dinámico.

¿Es posible exportar todos los valores de un objeto?


Cada respuesta requiere el cambio de las declaraciones de importación.

Si quieres poder usar:

import {a} from ''./my-module'' // a === 1 import * as myModule from ''./my-module'' // myModule.a === 1

como en la pregunta, y en su my-module tiene todo lo que necesita exportar en un objeto (que puede ser útil, por ejemplo, si desea validar los valores exportados con el esquema Joi o JSON), entonces su my-module debería ser tanto:

let values = { a: 1, b: 2, c: 3 } let {a, b, c} = values; export {a, b, c};

O:

let values = { a: 1, b: 2, c: 3 } export let {a, b, c} = values;

No es bonito, pero se ajusta a lo que necesitas.

Ver: ejemplo de Babel


Exportar cada variable desde su archivo de variables. Luego, importarlos con * como en su otro archivo y exportarlos como una constante desde ese archivo le dará un objeto dinámico con las exportaciones nombradas del primer archivo que son atributos en el objeto exportado desde el segundo.

Variables.js

export const var1 = ''first''; export const var2 = ''second'': ... export const varN = ''nth'';

Other.js

import * as vars from ''./Variables''; export const Variables = vars;

Third.js

import { Variables } from ''./Other''; Variables.var2 === ''second''


No lo parece así. Cita de los módulos ECMAScript 6: la sintaxis final :

Puede que se pregunte: ¿por qué necesitamos exportaciones con nombre si simplemente podríamos exportar objetos por defecto (como CommonJS)? La respuesta es que no puede imponer una estructura estática a través de objetos y perder todas las ventajas asociadas (descritas en la siguiente sección).



Realmente no puedo recomendar esta solución , pero funciona. En lugar de exportar un objeto, utiliza exportaciones con nombre de cada miembro. En otro archivo, importe las exportaciones con nombre del primer módulo a un objeto y exporte ese objeto por defecto. También exporte todas las exportaciones nombradas desde el primer módulo usando export * from ''./file1'';

valores / valor.js

let a = 1; let b = 2; let c = 3; export {a, b, c};

valores / index.js

import * as values from ''./values''; export default values; export * from ''./values'';

index.js

import values, {a} from ''./values''; console.log(values, a); // {a: 1, b: 2, c: 3} 1


Solo tenía que hacer esto para un archivo de configuración.

var config = { x: "CHANGE_ME", y: "CHANGE_ME", z: "CHANGE_ME" } export default config;

Puedes hacerlo así

import { default as config } from "./config"; console.log(config.x); // CHANGE_ME

Esto está usando el mecanografiado.


Sugiero lo siguiente, esperemos un module.js :

const values = { a: 1, b: 2, c: 3 }; export { values }; // you could use default, but I''m specific here

y luego puedes hacer en un index.js :

import { values } from "module"; // directly access the object console.log(values.a); // 1 // object destructuring const { a, b, c } = values; console.log(a); // 1 console.log(b); // 2 console.log(c); // 3 // selective object destructering with renaming const { a:k, c:m } = values; console.log(k); // 1 console.log(m); // 3 // selective object destructering with renaming and default value const { a:x, b:y, d:z = 0 } = values; console.log(x); // 1 console.log(y); // 2 console.log(z); // 0

Más ejemplos de objetos destructores: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring


prueba esta solución fea pero viable:

// use CommonJS to export all keys module.exports = { a: 1, b: 2, c: 3 }; // import by key import { a, b, c } from ''commonjs-style-module''; console.log(a, b, c);


export const a = 1; export const b = 2; export const c = 3;

Esto funcionará con las transformaciones de Babel hoy y debería aprovechar todos los beneficios de los módulos ES2016 siempre que esa característica realmente llegue a un navegador.

También puede agregar export default {a, b, c}; que le permitirá importar todos los valores como un objeto sin el * as , es decir, import myModule from ''my-module'';

Fuentes: