簡體   English   中英

Javascript-“ import”和“ export”語句在哪里合法?

[英]Javascript - Where are 'import' and 'export' statements legal?

我正在研究Javascript中的新importexport功能,但想知道,這些語句在語法上在哪里合法?

我了解類似以下內容的內容將不合法:

(function(){

    import thing from './thing.js';

})();

但這是否意味着import僅在模塊腳本的頂部合法? 還是在全球范圍內? 例如,如何處理:

import a from './a.js';

(function(){

    // ... do something with a ...

})();

import b from './b.js';

// ...

此外,此限制是否適用於export 例如,以下內容合法嗎?

(function(){

    function internalFunc() {
        // ...
    }

    export { internalFunc };

})();

在規范的當前草案中,我似乎找不到任何相關信息。

javascript中沒有這樣的實現。 已經計划好了 但是還沒有瀏覽器實現它。 它已在Webpack和Babel等某些編譯器中實現。 NodeJ中也有要求。 但不是原生於javascript。 導入文件的其他方法是使用RequireJS庫。

參考: https : //developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/import

編輯

回答您在評論中提出的問題:AFAIU在已經可用的導入和導出實現中,是的,它們可以在全球范圍內使用,並且可以導入和導出。 但是,在您的評論問題中,不是很清楚的是您的意思是“僅在全球范圍內可用”。 沒有這樣的封閉空間不能訪問全局空間。 全球空間無處不在,進出口也是如此。

我對規范的閱讀是:

  • 模塊導出語句應位於模塊的頂層

  • 模塊導入語句應位於模塊的頂層

  • 在允許表達式的任何地方都可以使用函數樣式的模塊導入表達式(返回對導入項的承諾)

如您所說,目前僅在編譯器中受支持,因此我不確定現有的編譯器(Babel)是否遵循這些規則。

1)如果您只想使用importexport語句,則可以在Google chrome中使用它而無需任何轉譯(通過webpack);)

在進行一些研發時,我總是使用ES6模塊。 然后,只有當我的臨時工作值得時,我才開始考慮移植。

只是不要忘記以這種方式包括腳本:

<script type="module" src="index.js"></script>

2)如果你需要編寫一些腳本的NodeJS,然后打開一些實驗標志使用模塊- https://nodejs.org/api/esm.html#esm_enabling

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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