2013-12-16 19 views
12

我試圖實施一些rails資產管道,證明比我希望更難。Rails資產管道與ES6模塊和browserify

爲了清晰地構造的應用程序,我打算使用的模塊系統,用於的JavaScript。爲此,我想使用CommonJS模塊,但我想使用新的ES6語法編寫它們以實現未來的兼容性。

我已經找到了該資產的管道,其效果很好的ES6模塊transpiler延長,但這只是把它轉換成CommonJS的格式。我仍然需要將這個轉化爲瀏覽器能夠理解的JS。對於我正在考慮使用Browserify但我的問題在於結合這些2

在每個文件的基礎transpiler工作的模塊,但browserify作品通過檢查所需的所有文件。問題是browserify不能使用原始文件,因爲它們不是CommonJS格式,它們在ES6中,所以它需要轉發版本,但是因爲這發生在管道中,所以我不能指向browserify文件。

都是圍繞這個有什麼方法?

回答

5

我的建議是使用browserify-rails寶石。對於ES6,你會使用諸如transform這一個:幾個月後https://github.com/thlorenz/es6ify

更新:我還是建議相同的路徑,但如果你可以下車資產管道,我強烈推薦去的WebPack或直接browserify。資產管道有一些好處,但以我的經驗,試圖讓JavaScript成爲一流的公民是痛苦的,它的好處大於缺點(對我來說)。

+0

嘿。我已經通過資產管道運行了browserify,它運行得非常好。我唯一的問題是,我似乎沒有等到其他的鏈輪處理器處理完文件(如erb或在我的情況下,ES6),然後瀏覽器處理該輸出。 – PaReeOhNos

+0

@PaReeOhNos你有一些代碼嗎?也許例如git回購?我沒有這個問題,但我的用例很簡單 - 只是.js文件。我會問你爲什麼把JavaScript放在erb中?不確定在ES6上(想看例子)。我一直在研究browserify-rails - 它和browserify肯定還有一些痛點。 – Cymen

+1

我並沒有太多地使用ERB,更多隻是作爲一個例子。但ES6的擴展工作方式相同。即你給這些文件一個es6.js擴展名。我的問題在於,browserify rails可以在所有的javascript文件上運行,但是我的所有文件都是ES6格式的,所以我需要在ES6處理器處理完之後對源代碼運行browserify。因爲我已經放棄了作爲ES6我無法找到一個乾淨的解決方案,因爲我希望能在資產管道完全保持 – PaReeOhNos

7

您可能想嘗試Seth Vincent's方法,他使用package.json和npm腳本運行所有JavaScript任務,並且只在資產管道中使用bundle.js。然後你可以從你的Rakefile中抽出npm任務。我喜歡他的方法,因爲它爲JS任務打開了現代JS工具鏈。

+0

看起來像一個不錯的方法。我會看看:) – PaReeOhNos

+2

這個醜陋的部分是你需要3個文件(1個用於鏈輪,1個用於CommonJS,1個用於瀏覽器的輸出,也就是'捆綁'),然後你還需要檢查生成的包插入源代碼或覆蓋啓動Rails的所有方法,以確保該包已生成...即使您修復了這個問題,仍然有兩個文件。不可怕,我喜歡和RoR分離,但有些事情需要考慮。 – Cymen

+0

三個文件和NPM將總是贏得訂單爲基礎的操作和笨重的鏈輪。 – cnp