2016-04-28 1 views
0

, например.Как экспортировать весь модуль по умолчанию?

// lib.js 
export function f1() {} 
export function f2() {} 
export * as default; // invalid syntax 

А потом в другом файле:

// app.js 
import lib from './lib.js'; 
lib.f1(); 

Есть ли способ сделать это без экспорта каждой функции в явном виде? например

export default {f1, f2}; // tedious 

PS: Я знаю, что я могу import * as lib from './lib.js'.

+0

Зачем вам w муравей сделать это? Вы уже экспортируете их по имени. – Bergi

ответ

2
import * as lib from './lib'; 
export default lib; 

должно быть достаточно. Таким образом, модуль импортирует весь свой собственный экспорт, а затем экспортирует себя в качестве экспорта по умолчанию.

Я отвечу на второй вопрос Берги, хотя это не очень хорошо с точки зрения дизайна API и, вероятно, будет медленнее. Если что-то использует ваш модуль и ему необходимо импортировать его, он должен знать, что он импортирует, или попросить их всех самостоятельно, ваш модуль не должен делать это для них.

+0

Вы можете импортировать себя ?? Как это не создает рекурсию? – mpen

+1

Это не должно быть проблемой, вы по существу захватываете ссылку на экспорт модуля, прежде чем экспорт будет инициализирован, но после того, как все они были проанализированы. – loganfsmyth

1

Я знаю, что могу import * as lib from './lib.js'.

И вы действительно должны. Не делайте ваш API более запутанным, чем нужно.

Если вы все еще хотите по умолчанию, экспортировать свой собственный объект модуль пространства имен, вы можете также сделать

export * as default from "./lib.js"; // self-reference 
+1

Этот синтаксис является предложением, а также в настоящее время не разрешает 'default', хотя я сделал файл, чтобы узнать, было ли это намеренно: https://github.com/leebyron/ecmascript-export-ns-from/issues/ 1 – loganfsmyth

+0

@loganfsmyth: Ах, я знал, что должен был проверить, прежде чем публиковать это. [Я действительно должен был знать] (http://stackoverflow.com/a/34072770/1048572). – Bergi

+0

Как это делает мой API более запутанным? Я не использую 'default' для чего-либо еще, он просто спасает вас от записи' * as' каждый раз, когда вы используете lib. 99% времени, когда вы * хотите * пространство имен, и если вы не по какой-то причине, у вас все еще есть этот параметр. – mpen

0

Heres другой вариант:

lib.js

export default { 
    someFunctionOne:() => { 

    }, 

    someFunctionTwo:() => { 

    }, 


    someFunctionThree:() => { 

    } 
}; 

app.js

import lib from './lib'; 

lib.someFunctionOne(); 
+0

Я хотел как голые имена, так и объект по умолчанию, хотя :) – mpen

Смежные вопросы