Fantastici bocconcini! Questo è stato più difficile di quanto fosse necessario.
Esporta un valore predefinito piatto
Questa è una grande opportunità per usare spread ( ...
in { ...Matters, ...Contacts }
seguito:
// 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);
Quindi, per eseguire il codice compilato babel dalla riga di comando (dalla radice del progetto /):
$ 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' }
Esporta un predefinito ad albero
Se preferisci non sovrascrivere le proprietà, modifica:
// imports/collections/index.js
import Matters from './Matters'; // import default as 'Matters'
import Contacts from './Contacts';
export default { // export default
Matters,
Contacts,
};
E l'output sarà:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: { hello: 'World', something: 'important' },
Contacts: { hello: 'Moon', email: 'hello@example.com' } }
Esporta più esportazioni con nome senza impostazione predefinita
Se sei dedicato a DRY , cambia anche la sintassi sulle importazioni:
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
Ciò crea 2 esportazioni denominate senza esportazione predefinita. Quindi cambia:
// imports/test.js
import { Matters, Contacts } from './collections';
console.log(Matters, Contacts);
E l'output:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
Importa tutte le esportazioni denominate
// 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);
Si noti la destrutturazione import { Matters, Contacts } from './collections';
nell'esempio precedente.
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: [Getter], Contacts: [Getter] }
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
In pratica
Dati questi file sorgente:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
La creazione di un /myLib/index.js
raggruppamento di tutti i file vanifica lo scopo dell'importazione / esportazione. Sarebbe più semplice rendere tutto globale in primo luogo, piuttosto che rendere tutto globale tramite import / export tramite "file wrapper" index.js.
Se vuoi un file particolare, import thingA from './myLib/thingA';
nei tuoi progetti.
La creazione di un "file wrapper" con esportazioni per il modulo ha senso solo se stai confezionando per npm o su un progetto pluriannuale pluriannuale.
Sei arrivato così lontano? Vedi i documenti per maggiori dettagli.
Inoltre, yay per Stackoverflow supporta infine tre `s come markup di code fence.