RequireJS gebruiken met een Rails 3.1-app

Vraag

Als u RequireJS hebt gebruikt met een Rails 3 (esp 3.1) -app, hoe werkt dat dan voor u? Eventuele configuratietrucs of andere gotchas waar ik op moet letten?

Achtergrond

Ik overweeg RequireJS te gebruiken voor de op sprockets gebaseerde Asset Pipeline in Rails 3.1, specifiek voor JavaScript-code. Ik heb twee motivators voor deze keuze:

  • Ik wil het modulebeheer van RequireJS gebruiken voor mijn JS client-side code.
  • Ik wil graag een precompilatiesysteem dat mijn JS-bibliotheekcode in andere contexten kan volgen. Tot mijn verbazing is de precompiler van Asset Pipeline een ingelegd onderdeel van Rails, geen onderdeel van Sprockets zelf.

Alle feedback op prijs gesteld, bedankt!

25
Kun je meer vertellen over waarom je RequireJS 'modulebeheer boven Sprockets' zou willen? Ik denk erover om hetzelfde te doen voor onze Rails-app - Sprockets vervangen door RequireJS.
toegevoegd de auteur kangax, de bron
@kangax, Sprockets biedt niet echt modulebeheer. Het conglomereert gewoon een stelletje JavaScript in een gebouwd bestand via de richtlijnen van Sprockets. Het is namelijk zo dat ik de requirejs-rails edelsteen heb gepubliceerd om RequireJS in Rails te integreren, gebruik maken van Sprockets voor conversie van CoffeeScript. Bijna 0.5.0 release met precompliation-ondersteuning.
toegevoegd de auteur John Whitley, de bron

1 antwoord

Voor het nageslacht, hier is waar ik ben gekomen op deze vraag:

  • RequireJS biedt een implementatie van de API Asynchronous Module Definition . RequireJS ' Waarom AMD? pagina legt uit waarom u dit zou willen gebruiken.

  • Sprockets en de Rails 3 Asset Pipeline maken eenvoudige structurering van JavaScript/CoffeeScript-code mogelijk, maar bieden geen echte modulesteun. Er is bijvoorbeeld geen naamruimte-instelling in Sprockets.

  • jQuery (vanaf 1.7), onderstrepingsteken, Dojo en vele andere belangrijke bibliotheken hebben AMD-ondersteuning geïmplementeerd. Verscheidene andere belangrijke JS-bibliotheken lijken AMD-ondersteuning te hebben voor de kortetermijnhorizon (bijvoorbeeld Backbone.js).

Het is zeker mogelijk om een ​​Rails-app te maken die RequireJS integreert. Om dat proces te vereenvoudigen, heb ik de requirejs-rails gem op github gemaakt, met eenvoudige configuratie en Asset Pipeline-aware precompilatie voor AMD-gebaseerde code via r.js . De huidige release is beschikbaar via:

gem install requirejs-rails

48
toegevoegd
@leppert U kunt de shim-configuratie altijd gebruiken en "_" exporteren.
toegevoegd de auteur Chad Johnson, de bron
Bedankt voor dit juweeltje. Is er de code Rails-app die ik kan zien laat zien hoe het allemaal is opgezet, bij voorkeur met Backbone. Ik heb de documenten gelezen, maar ik ben onbekend met require.js en niet zo ervaren/bekwaam met javascript, dus ik kan het veel beter met een goed voorbeeld.
toegevoegd de auteur Leahcim, de bron
Hier is een voorbeeld Rails 4 applicatie die requirejs-rails integreert: github.com/pboling/require-rails -example
toegevoegd de auteur rubiii, de bron
Ook voor het nageslacht ondersteunt Underscore niet langer AMD. Echter, Lodash, een drop-in-vervanging voor Underscore, doet. lodash.com
toegevoegd de auteur leppert, de bron