Grandes muglys gugly! Esto fue más difícil de lo necesario.
Exportar un valor predeterminado plano
Esta es una gran oportunidad para usar spread ( ...
a { ...Matters, ...Contacts }
continuación:
// imports/collections/Matters.js
export default { // default export
hello: 'World',
something: 'important',
};
// imports/collections/Contacts.js
export default { // default export
hello: 'Moon',
email: 'hello@example.com',
};
// imports/collections/index.js
import Matters from './Matters'; // import default export as var 'Matters'
import Contacts from './Contacts';
export default { // default export
...Matters, // spread Matters, overwriting previous properties
...Contacts, // spread Contacts, overwriting previosu properties
};
// imports/test.js
import collections from './collections'; // import default export as 'collections'
console.log(collections);
Luego, para ejecutar el código compilado de babel desde la línea de comandos (desde la raíz del proyecto /):
$ npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
(trimmed)
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'Moon',
something: 'important',
email: 'hello@example.com' }
Exportar un valor predeterminado similar a un árbol
Si prefiere no sobrescribir las propiedades, cambie:
// imports/collections/index.js
import Matters from './Matters'; // import default as 'Matters'
import Contacts from './Contacts';
export default { // export default
Matters,
Contacts,
};
Y la salida será:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: { hello: 'World', something: 'important' },
Contacts: { hello: 'Moon', email: 'hello@example.com' } }
Exportar múltiples exportaciones con nombre sin valor predeterminado
Si está dedicado a DRY , la sintaxis de las importaciones también cambia:
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
Esto crea 2 exportaciones con nombre sin exportación predeterminada. Luego cambia:
// imports/test.js
import { Matters, Contacts } from './collections';
console.log(Matters, Contacts);
Y la salida:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
Importar todas las exportaciones nombradas
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
// imports/test.js
// Import all named exports as 'collections'
import * as collections from './collections';
console.log(collections); // interesting output
console.log(collections.Matters, collections.Contacts);
Observe la desestructuración import { Matters, Contacts } from './collections';
en el ejemplo anterior.
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: [Getter], Contacts: [Getter] }
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
En la práctica
Dados estos archivos fuente:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
La creación de un /myLib/index.js
paquete para agrupar todos los archivos anula el propósito de importar / exportar. Sería más fácil hacer que todo sea global en primer lugar, que hacerlo todo global mediante la importación / exportación a través de index.js "wrapper files".
Si desea un archivo import thingA from './myLib/thingA';
en particular, en sus propios proyectos.
Crear un "archivo contenedor" con exportaciones para el módulo solo tiene sentido si está empaquetando para npm o en un proyecto multianual de varios equipos.
¿Llegó tan lejos? Vea los documentos para más detalles.
Además, sí, Stackoverflow finalmente admite tres s como marcado de valla de código.