2017-08-31 45 views
0

有沒有辦法將這兩個導出語句結合起來?JavaScript - 導入/導出和解構

我明白模塊不是對象文字,但似乎很奇怪,我實際上不能導入然後在這裏輸出動作。從我迄今爲止的嘗試中,似乎必須直接從導入中導出。

如果目前還沒有解決方案,那麼任何人都知道將來有什麼方案可以應用在地平線上嗎?

// index.js 

import reducer from './reducer'; 
import selectors from './selectors'; 

export * from './actions'; 
export { reducer as default, selectors }; 

更新

由於明確的導入/導出似乎並不可能,我決定定居的一致性,使我的選擇對象經常出口,而不是默認的導出,並然後從所有三個進口直接出口。

export * from './actions'; 
export * from './selectors'; 
export { reducer as default } from './reducer'; 

雖然我仍然對原始問題的解決方案感興趣。

+0

「這兩個statemenst」你的意思是?爲什麼你不能「導入並在此輸出動作」? –

+0

@SebastianSebald底部的兩個輸出語句。 'actions.js'有很多導出。我需要導入所有這些操作,然後從'index.js'中導出它們。最理想的情況是,解構可以「導出{reducer作爲默認,選擇器,...動作};',但顯然模塊不支持解構。 – jabacchetta

+0

啊,你打敗了我! :) –

回答

1

關於什麼:

export { reducer as default } from './reducer'; 
export * from './selectors'; 
export * from './actions'; 

也許不是100%,你想要什麼,但它仍然是一個代碼少行。


但是你實際上可以用CJS進行解構。像這樣的東西應該工作:

exports = { 
    default: require('./reducer').reducer, 
    selectors: require('./selectors'), 
    ...require('./actions') 
}; 
+1

大聲笑,看起來像我們在同一頁面 - 我剛剛更新我幾乎完全相同的問題。不過,如果我在幾周內沒有回答我原來的問題,我會鼓勵你。 – jabacchetta

+0

是的;)我猜TC39當前的重點,當談到ES模塊時,就是讓CJS和ESModules兼容。目前的ESModule語法沒有破壞:http://2ality.com/2014/09/es6-modules-final.html雖然,CJS有! –