2

有沒有辦法以模塊化的方式向咖啡編譯器添加預處理步驟?coffeescript的自定義預處理步驟?

說,例如,我想增加一個所有陣列或下劃線功能對象的功能,讓我做這樣的事情testArray.first()並將其編譯成_.first(testArray)

這是後話這將在普通的javascript中做非常危險,因爲我不得不擴展Array.prototype並可能會破壞其他庫中的數組功能。儘管如此,咖啡劇本似乎是安全和有趣的。

這將是巨大的,如果有一種方法在某種程度上是

  1. 模塊化做到這一點 - 我可以添加多個預處理步驟,從不同的項目,這使得編程更加輕鬆優雅拉動不同的方式
  2. 集成 - 我想能夠在coffeescript的配置文件中更改某些內容,以便我不必使用自定義二進制文件,並在調用咖啡編譯器的每一個開發工具中替換該命令(用於現場編輯等)。

這是否存在內置於咖啡標記?如果不是,它似乎應該。如果沒有人聽說過,我會和開發人員一起提出。

回答

3

CoffeeScript沒有插件系統。如果你想定製它,沒有簡單的方法。您可以分叉CoffeeScript回購,並根據您的要求修改編譯器。但是,這意味着您必須定期通過主repo的更新來維護編譯器的分支。

請參閱從CoffeeScript的編譯器回購下面的代碼(https://github.com/jashkenas/coffeescript/blob/master/lib/coffee-script/coffee-script.js#L195):

.... 
    o[k] = v; 
} 
o.bare = true; 
js = compile(code, o); 
if (sandbox === global) { 
    return vm.runInThisContext(js); 
} else { 
    return vm.runInContext(js, sandbox); 
} 
.... 

您可以添加新的方法到這個文件

precompile = function (code) { 
    // do pre-processing here 
} 

,並

js = compile(precompile(code), o); 

我的天堂這並沒有嘗試過,所以你可能會在做某些事情時碰到牆壁。儘管你想要的變化足夠簡單,不用擔心詞法分析器。

雖然,您可以編寫自己的解析器來進行任何語言的這些更改,並使用grunt/gulp將咖啡編譯和預編譯步驟相結合。我會推薦這種方法。