簡體   English   中英

無法在Babel中使用來自'file'的es6`export Module

[英]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.Type1Message.Type2等方式訪問消息類型。

根據我的閱讀,(包括http://www.2ality.com/2014/09/es6-modules-final.htmlhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM