2011-10-27 41 views
25

問題有一個Rails 3.1的應用程序

如果你已經使用RequireJS有一個Rails 3(ESP 3.1)應用程序中使用RequireJS,怎麼是爲你工作?我需要注意的任何配置技巧或其他陷阱?

背景

我使用RequireJS在鏈輪,基於資產管道考慮用Rails 3.1,專爲JavaScript代碼。我有兩個激勵因素:

  • 我想爲我的JS客戶端代碼利用RequireJS的模塊管理。
  • 我想要一個預編譯系統,可以按照我的JS庫代碼進入其他上下文。令我驚訝的是,Asset Pipeline預編譯器是Rails的一部分,而不是Sprockets本身的一部分。

所有的反饋讚賞,謝謝!

+1

你能告訴更多有關你爲什麼會想RequireJS一個」過度鏈輪模塊管理:當前的版本通過可用?我正在考慮爲我們的Rails應用程序做同樣的事情 - 用RequireJS替換Sprockets。 – kangax

+4

@ kangax,鏈輪並不真正提供模塊管理。它只是通過Sprockets的指令將一堆JavaScript集成到一個構建文件中。碰巧,我發佈了[requirejs-rails](https://github.com/jwhitley/requirejs-rails/)gem,將RequireJS整合到Rails中,利用Sprockets for CoffeeScript轉換。接近0.5.0版本,提供預先支持。 –

回答

48

對於後人,這裏的地方我來對這個問題:

  • RequireJS提供Asynchronous Module Definition API的實現。 RequireJS'Why AMD? page列出了你爲什麼要使用它的情況。

  • 鏈輪和Rails 3資產管道允許簡單的JavaScript/CoffeeScript代碼結構,但不提供任何真正的模塊支持。例如,Sprockets中沒有任何名稱空間控制。

  • jQuery(截至1.7),Underscore,Dojo和許多其他主要圖書館都實施了AMD支持。幾個其他主要的JS庫似乎在近期水平上有AMD支持(例如Backbone.js)。

當然可以創建一個集成了RequireJS的Rails應用程序。爲了簡化這一過程,我創建了requirejs-rails gem on github,通過r.js爲基於AMD的代碼提供了直接配置和資產流水線感知預編譯。

gem install requirejs-rails

+1

也爲後人,Underscore不再支持AMD。但是,Lodash是Underscore的替代產品,它的確如此。 http://lodash.com – leppert

+2

感謝這寶石。有代碼Rails應用程序,我可以看到它顯示了它是如何設置的,最好是使用Backbone。我已經閱讀過文檔,但是我對require.js不熟悉,並且沒有經驗豐富/熟練使用javascript,所以我通過一個工作示例相處得更好。 – Leahcim

+0

下面是一個集成了requirejs-rails的示例Rails 4應用程序:https:// github。com/pboling/require-rails-example – rubiii

相關問題