2013-02-11 27 views
1

當寫在CoffeeScript的AMD模塊,因爲一切都被包裹在一個功能,每一個文件最終看起來像這樣:在coffeescript AMD模塊沒有縮進整個文件?

define 'myModule', ['dep1', 'dep2'], (dep1, dep2) -> 
    funcA: -> 
    funcB: -> 
    # etc... 
    funcZ: -> 

我想,以儘量減少我的代碼縮進,使之更容易理解,而且我不喜歡AMD如何在幾乎所有方面增加縮進水平。有沒有辦法避免它?

回答

2

不幸的是,現在不行。但是一個功能提案可以完全解決這種用例(以及其他問題,特別是關於異步回調代碼和一般回調函數)is being actively discussed in the CoffeeScript Issues。所提出的功能被稱爲「backcalls」,它基本上是一種語法轉換,使得這種回調嵌套代碼看起來更加順序。你的模塊定義會是什麼樣子:

(dep1, dep2) <- define 'myModule', ['dep1', 'dep2'] 

funcA: -> 
funcB: -> 
# etc... 
funcZ: -> 

如果你想要的東西的工作現在,有一兩件事你可以做的是一個預處理步驟添加到您的構建配置,以便define ...線和壓痕在進入CoffeeScript編譯器之前被添加。

您可以與.coffee源上的一些特殊的註釋聲明你的模塊:

#!module=myModule 
#!dependencies=dep1,dep2 

funcA: -> 
funcB: -> 
# etc... 
funcZ: -> 

,然後有一個腳本,將閱讀這些評論併產生define 'myModule', ['dep1', 'dep2'], (dep1, dep2) ->行和縮進一個級別添加到每一行在輸入文件中。

所以您構建步驟看起來是這樣的:

cat myModule.coffee | add-amd | coffee -sc > myModule.js 
+1

的backcall語法看起來很有趣。我認爲,如果我要添加一個預處理步驟,它將成爲AMD轉換器的常見選擇。 – gregsabo 2013-02-13 02:00:57

+0

@gregsabo這是一個很好的選擇。更好的是:看起來[RequireJS提供了一個工具](http://requirejs.org/docs/commonjs.html)就是這麼做的。看起來'r.js'工具雖然是JS代碼轉換器,但它必須是CoffeeScript編譯器之後的後處理器。祝你好運:) – epidemian 2013-02-13 02:46:09