Großartige Gugly Muglys! Das war schwieriger als es sein musste.
Exportieren Sie eine flache Standardeinstellung
Dies ist eine großartige Gelegenheit, Spread zu verwenden ( ...
siehe { ...Matters, ...Contacts }
unten:
// 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);
So führen Sie babel kompilierten Code über die Befehlszeile aus (vom Projekt root /):
$ 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' }
Exportieren Sie einen baumartigen Standard
Wenn Sie Eigenschaften lieber nicht überschreiben möchten, ändern Sie:
// imports/collections/index.js
import Matters from './Matters'; // import default as 'Matters'
import Contacts from './Contacts';
export default { // export default
Matters,
Contacts,
};
Und die Ausgabe wird sein:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: { hello: 'World', something: 'important' },
Contacts: { hello: 'Moon', email: 'hello@example.com' } }
Exportieren Sie mehrere benannte Exporte ohne Standard
Wenn Sie sich DRY widmen, ändert sich auch die Syntax der Importe:
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
Dadurch werden 2 benannte Exporte ohne Standardexport erstellt. Dann ändern Sie:
// imports/test.js
import { Matters, Contacts } from './collections';
console.log(Matters, Contacts);
Und die Ausgabe:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
Importieren Sie alle benannten Exporte
// 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);
Beachten Sie die Destrukturierung import { Matters, Contacts } from './collections';
im vorherigen Beispiel.
$ 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 der Praxis
Angesichts dieser Quelldateien:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
Das Erstellen eines /myLib/index.js
zum Bündeln aller Dateien hat keinen Zweck zum Importieren / Exportieren. Es wäre einfacher, alles global zu machen, als alles global durch Import / Export über index.js "Wrapper-Dateien" zu machen.
Wenn Sie eine bestimmte Datei möchten, import thingA from './myLib/thingA';
in Ihren eigenen Projekten.
Das Erstellen einer "Wrapper-Datei" mit Exporten für das Modul ist nur dann sinnvoll, wenn Sie für npm oder in einem mehrjährigen Multi-Team-Projekt packen.
Bis hierher geschafft? Weitere Informationen finden Sie in den Dokumenten .
Außerdem unterstützt Stackoverflow endlich drei als Code-Zaun-Markup.