Прекрасні гуглики! Це було складніше, ніж треба було.
Експорт одного плоского за замовчуванням
Це відмінна можливість використовувати поширення ( ...
в { ...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: '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);
Потім, щоб запустити компільований код 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: 'hello@example.com' }
Експортуйте один за замовчуванням дерево
Якщо ви не хочете перезаписати властивості, змініть:
// 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: 'hello@example.com' } }
Експорт декількох названих експортів без замовчування
Якщо ви присвячені 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: 'hello@example.com' }
Імпортуйте весь названий експорт
// 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: 'hello@example.com' }
На практиці
Враховуючи ці вихідні файли:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
Створення /myLib/index.js
пакету для збереження всіх файлів розбиває мету імпорту / експорту. Було б простіше зробити все глобальне в першу чергу, ніж зробити все глобальним за допомогою імпорту / експорту через index.js "обгорткові файли".
Якщо ви хочете певного файлу, import thingA from './myLib/thingA';
у власних проектах.
Створення "файлу обгортки" з експортом для модуля має сенс лише в тому випадку, якщо ви пакуєте для npm або для багаторічного багатокомандного проекту.
Зробили це далеко? Докладніше див. У документах .
Крім того, yay для Stackoverflow нарешті підтримує три `s як розмітку кодового паркану.