2016-05-17 83 views
1

我在這裏做什麼有點困惑。我見過很多人在JS中創建模塊,但每個人通常都以不同的方式創建模塊。我見過人們把他們的整體模塊包裝在一個(function(){})();中,或者他們聲明一個對象字面值,或者做一些像window.Module = {};一樣瘋狂的東西。我想知道什麼是最好的選擇(如你認爲最有用的)。幫助真的很感激,謝謝。如何創建JS模塊?

+1

從哪個角度看「最好」?沒有什麼是絕對理想的 – zerkms

回答

1

我會說:這取決於你的「模塊」的最終用法。如果它是內部使用的東西,這意味着您的企業之外沒有其他人會使用它,那麼只要您都同意採用適當的方法,就可以使用任何東西。否則,如果它被其他人使用:你創建的全局變量越少,就越好。例如,jQuery使用「$」和「jQuery」作爲全局變量(也許是其他人,但我不確定)。當人們添加模塊時,他們總是將它們添加到window.jQuery.[Under jQuery var],其中[Under jQuery var]應在jQuery文檔上閱讀以供正確使用。

2

只有一個官方解決方案來創建JavaScript模塊。你所看到的任何東西都是爲這個解決方案填充的,或者是對真實事物的蒼白迴應。

的基本語法如下:

import otherStuff from "otherStuff.js"; 
var myThing = {}; 

myThing.stuff = function(){ /*...*/ }; 
myThing.do = function(){ otherStuff.doOther();); 

export default myThing; 

它可以變得複雜得多,但基本是:

  • 你的模塊必須是唯一的文件。一個文件是一個模塊。
  • 您的模塊應該可能出口的東西,雖然這不是嚴格必要的。

這是JavaScript的管道。不幸的是,沒有人能夠就模塊的官方說明書達成一致,所以它們不在任何不久的將來發布的軌道上。也就是說,規範是under development,以及一個實現它的polyfill has been created

使用官方模塊語法的最佳方法是通過BabelJS運行它並編譯爲像Require這樣的墊片(它使用AMD格式),因此您可以在不使用裝載程序規範的情況下使用它。

您可以閱讀有關語法herehere的更多信息。

+0

可否回答我爲什麼很多人看到ECMAScript6的答案,即使它不是一歲?我們不應該考慮更廣泛的解決方案嗎? –

+0

@MasterDJon,ECMAScript2015模塊規範已定稿[近2年](https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-07/jul-30.md),並已一直在開發中的時間遠遠長於此。它是語言規範的一部分。我不確定比「使用將在每個JS運行時實現的官方語言規範」要多得多。我現在缺乏支持,通過像Babel這樣的翻譯人員回答。 – rockerest

+0

@MasterDJon「我們不應該考慮更廣泛的解決方案嗎?」 ---你當然可以。其中一個也可能將w3m和lynx作爲其支持的瀏覽器,而其他則只是使用實際的現代標準 – zerkms