在過去,我使用了revealing module pattern。ES6的地道展示模塊模式
function myModule() {
function foo() ...
function bar() ...
return {
foo: foo,
bar: bar
};
}
隨着ES6,這是用對象速記進行了改進。
function myModule() {
function foo() ...
function bar() ...
return { foo, bar };
}
帶內置模塊語法
現在,我苦苦尋找的首選模式是最相似的上方。
選項#1命名爲出口
// export file
function foo() ...
function bar() ...
export { foo, bar };
// import file
import { foo, bar } from './export-file';
foo();
bar();
選項#2默認的導出/導入與解構
// export file
function foo() ...
function bar() ...
export default { foo, bar };
// import file
import baz from './export-file';
const { foo, bar } = baz;
foo();
bar();
選項#3默認的導出/導入與名稱間距
// export file
function foo() ...
function bar() ...
export default { foo, bar };
//import file
import baz from './export-file';
baz.foo();
baz.bar();
我像選項#1,爲了簡化它在「解構」導入語法中提供的命名導出。
import { foo, bar } from './export-file';
我也想繼續做在出口對象導出文件的底部明確定義模塊的輸出API。
export { foo, bar };
// OR
export default { foo, bar };
我讀了默認的出口首選所有的時間,所以我一直試圖找到一種優先方式,包括默認的出口,但我不願採用,因爲它只是似乎少更詳細優點(除了需要命名空間,或者在某些情況下包含命名和默認輸出)。
是否有與ES6模塊語法透露出模塊模式的慣用模式?
我個人比較喜歡的選項#2,因爲這感覺就像是緊密匹配RMP。 – evolutionxbox
您也可以直接導出函數定義:'export function foo(){...'。這個問題是基於某種意見的,這裏是我的:不要默認導出「名稱空間對象」,因爲無論如何,我們可以從'。export/file''中導入*。 –
對不起,我錯過了「我也想繼續在底部明確定義模塊導出的API」,但仍然認爲默認應該提供一些基本的東西,例如TheOneClassToRuleThemAll和可能的實用程序等屬於無格式導出,因此模塊的用戶可以輕鬆地在導入語句中解構,或者執行明星導入。 –