2013-12-16 36 views
12

tarayıcılarına göz atın Raylar varlık boru hattı ile umduğumdan daha zor olduğunu kanıtlamaya çalışıyorum. temiz uygulamayı yapı içinES6 modülleri ile varlık boru hattını raylara bağlayın ve

, javascript için bir modül sistemi kullanmak planı. Bunun için CommonJS modüllerini kullanmak istiyorum, ancak gelecekteki uyumluluk için yeni ES6 sözdizimini kullanarak yazmak istiyorum.

Ben iyi çalışıyor varlık boru hattı için ES6 modülü transpiler uzantısı bulduk ama bu sadece CommonJS biçime dönüştürür. Bunu hala tarayıcının anlayacağı JS'ye yüklemem gerekiyor. Bunun için ben Browserify kullanarak bakıyorum ama benim sorunum bu 2.

bir dosya için ayrı ayrı çalışır transpiler modülü, ancak gerektiğinde tüm dosyaları kontrol ederek browserify eserlerini birleştirerek yatıyor. Sorun şu ki, tarayıcı dosyaları orijinal dosyaları CommonJS biçiminde olmadıkları için kullanamazlar, ES6'dalar, bu yüzden transpiled sürümlere ihtiyaç duyarlar, ancak bu işlem boru hattında gerçekleştiği için tarayıcıda dosya.

Bunun etrafında herhangi bir yolu var mı?

cevap

5

Benim önerim, browserify-rails gem kullanmaktır. ES6 için, aşağıdaki gibi bir transform kullanırsınız: https://github.com/thlorenz/es6ify

Birkaç ay sonra güncelleştirin: Yine de aynı yolu öneririm, ancak varlık aktarımından kurtulabiliyorsanız, doğrudan web paketine gitmenizi veya tarayıcıya göz atmanızı öneririm. Varlık boru hattının bazı faydaları var ama benim tecrübemde, JavaScript'i birinci sınıf bir vatandaşla paylaşmaya çalışmak onun için acı veriyor ve faydaları (benim için) dezavantajlara ağır basıyor.

+0

Hey. Ben zaten varlık boru hattı üzerinden çalışan browserify var ve çok iyi çalışıyor. Tek sorunum, diğer dişli işlemcilerin dosya (örneğin, erb veya benim durumumda, ES6) işlenmesini ve sonra bu çıktının browserify işlemine sahip olmasını beklemesini bekleyemem. – PaReeOhNos

+0

@PaReeOhNos Bazı kodunuz var mı? Belki örnek git repo? Bu problemi yaşamadım ama kullanım durumum oldukça basit - sadece .js dosyaları. Neden JavaScript'i erb'ye koyuyorsunuz? ES6'dan emin değil (örneği görmek istersiniz). Browserify-raylar üzerinde çalışıyorum - bu ve tarayıcıda kesinlikle bazı ağrı noktaları var. – Cymen

+1

Özellikle bir örnek olarak ERB'yi özellikle kullanmıyorum. Ancak ES6 uzantısı aynı şekilde çalışır. Dosyalara bir es6.js uzantısı veriyorsunuz. Sorunum, tüm javascript dosyalarının üzerinde bulunan tarayıcıların raylar üzerinde çalışmasına rağmen, tüm dosyalarımın ES6 biçimindeydi, dolayısıyla ES6 işlemcisi tarafından işlendikten sonra kaynakta tarayıcıyı çalıştırmam gerekiyordu. Ben bu yana temiz bir çözüm bulamadım ES12 düştü beri ben tamamen varlık boru – PaReeOhNos

7

Tüm JavaScript görevlerini çalıştırmak için package.json ve npm komut dosyalarını kullandığı Seth Vincent's yaklaşımını denemek isteyebilirsiniz ve yalnızca varlık kümesinde bundle.js'yi kullanır. Daha sonra Rakefile’nizden npm görevlerine gönderebilirsiniz. Yaklaşımını seviyorum çünkü JS görevleri için modern JS araç zincirini açıyor.

+0

Güzel bir yaklaşım gibi görünüyor. Ben bir göz atacağım :) – PaReeOhNos

+2

Bunun ile çirkin parçaları 3 dosya (1 sprockets için 1, CommonJS için 1 ve browserify aka 'bundle' çıkışı için 1) gerekir ve daha sonra oluşturulan paketi kontrol etmek gerekir Kaynak koduna veya Rails'in tüm yollarını kapsayacak şekilde paketin oluşturulduğundan emin olun ... Düzeltirseniz bile, hala iki dosyanız olur. Korkunç değil ve RoR'dan ayrılmayı seviyorum ama düşünecek bir şey var. – Cymen

+0

Üç dosya ve NPM her zaman, sipariş tabanlı işlemler ve tıkanıklık zincir dişlileri üzerinden her zaman kazanacaktır. – cnp

İlgili konular