[英]Unable to use es6 `export Module from 'file'` in Babel
我正在使用ES6構建一個用於與服務器進行JavaScript通信的庫。 服務器具有通過WebSocket發送和接收的特定類型的JSON編碼消息。
為了確保包含所有消息字段並且沒有額外字段發送到服務器,每種消息類型都有自己的類。 每條消息都在其自己的文件中定義,具有以下結構:
export default class NameOfMessage extends BaseMessage {
constructor(values) {
// Here is code that checks values and sets them as properties
// so that calling `JSON.stringify(obj)` will return the data
// to be sent to the server.
}
}
如果用戶在特定文件中只需要一個或兩個消息類型,則可以import NameOfMessageType1 from 'package_name/messages/type1'
編寫import NameOfMessageType1 from 'package_name/messages/type1'
, import NameOfMessageType2 from 'package_name/messages/type2'
等。
但是,如果用戶需要許多消息類型,則將它們全部包含在內會變得很麻煩。 出於這個原因,我創建了一個附加文件messages.js
,它import
所有消息文件,然后重新export
它們。 這樣,用戶可以import * as Message from 'package_name/messages'
並以Message.Type1
, Message.Type2
等方式訪問消息類型。
根據我的閱讀,(包括http://www.2ality.com/2014/09/es6-modules-final.html和https://hacks.mozilla.org/2015/08/es6-in-depth-modules / (標題為“聚合模塊”的部分),以及其他來源),我應該能夠使用以下作為messages.js
文件的內容:
export Type1 from './messages/type1';
export Type2 from './messages/type2';
...
但是,當我在任何import * as Messages from 'package_name/messages'
文件上運行Babel時,我得不到任何結果。 (它只是簡單的沒有做任何事情)。
當我將文件更改為具有以下內容時,一切都按預期工作:
import Type1 from './messages/type1';
import Type2 from './messages/type2';
export {Type1, Type2};
...
為什么其他方式不起作用?
仔細閱讀官方規格顯示,只有兩種方式可以使用export ... from ...
:
ExportDeclaration : export * FromClause ; export ExportClause FromClause ; ... // More export declarations ExportClause : { } { ExportsList } { ExportsList , }
export
所有其他用途不接受FromClause
。 事實證明, from
的唯一合法用途是與*
或與括號括起的出口列表相關聯。 沒有顯式引用default
就無法使用default
。
既然如此,以下文件有效:
export {default as Type1} from './messages/type1';
export {default as Type2} from './messages/type2';
...
我只是想補充說我有一個非常類似的問題。 我試圖直接從另一個文件導出的變量/模塊返回undefined
。 但是,如果我通過先導入然后將其導出回原來將其分解為兩個步驟,那就沒問題了。 問題的原因最終是我正在進行某種類型的循環導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.