Отличные гугли-мугли! Это было труднее, чем нужно.
Экспорт одного плоского по умолчанию
Это прекрасная возможность использовать spread ( ...
в { ...Matters, ...Contacts }
ниже:
// imports/collections/Matters.js
export default { // default export
hello: 'World',
something: 'important',
};
// imports/collections/Contacts.js
export default { // default export
hello: 'Moon',
email: '[email protected]',
};
// 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);
Затем, чтобы запустить код, скомпилированный babel из командная строка (из корня проекта /):
$ 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: '[email protected]' }
Экспорт одного древовидного значения по умолчанию
Если вы не хотите перезаписывать свойства, измените:
// imports/collections/index.js
import Matters from './Matters'; // import default as 'Matters'
import Contacts from './Contacts';
export default { // export default
Matters,
Contacts,
};
И вывод будет:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: { hello: 'World', something: 'important' },
Contacts: { hello: 'Moon', email: '[email protected]' } }
Экспорт нескольких именованных экспортов без значения по умолчанию
Если вы посвятили себя DRY, синтаксис импорта также изменится:
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
Это создает 2 именованных экспорта без экспорта по умолчанию. Затем измените:
// imports/test.js
import { Matters, Contacts } from './collections';
console.log(Matters, Contacts);
И вывод:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'World', something: 'important' } { hello: 'Moon', email: '[email protected]' }
Импортировать все именованные экспорты
// 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);
Обратите внимание на деструктуризацию import { Matters, Contacts } from './collections';
в предыдущем пример.
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: [Getter], Contacts: [Getter] }
{ hello: 'World', something: 'important' } { hello: 'Moon', email: '[email protected]' }
На практике
Учитывая эти исходные файлы:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
Создание /myLib/index.js
для объединения всех файлов сводит на нет цель импорта / экспорта. Было бы проще сделать все глобальным в первую очередь, чем сделать все глобальным с помощью импорта / экспорта через «файлы-оболочки» index.js.
Если вам нужен конкретный файл, import thingA from './myLib/thingA';
в ваших собственных проектах.
Создание «файла-оболочки» с экспортом для модуля имеет смысл только в том случае, если вы упаковываете пакет для npm или в многолетнем проекте с несколькими командами.
Сделали это так далеко? Дополнительные сведения см. В документации.
Кроме того, ура для Stackoverflow, наконец, поддерживающего три символа в качестве разметки кода.
person
Michael Cole
schedule
18.02.2019
lib/math
- это файл, содержащий несколько экспортированных файлов. В моем вопросеlib/math/
- это каталог, содержащий несколько файлов, каждый из которых содержит один экспорт. - person Joe Frambach   schedule 07.08.2015