Rails Javascript compression / minification sur response_ to javascript response?

Salutations Rails et gurus Javascript!

J'ai un projet où je renvoie un grand fichier javascript dans un

respond_to do |format| format.js end 

bloc.

J'essaie de comprendre comment je peux minimiser ou compresser la réponse .js puisque la vue .js.erb est pleine de commentaires et varie en fonction des résultats du contrôleur.

Quelqu'un a-t-il des idées?

Eh bien, je peux avoir une solution:

 respond_to do |format| format.js { self.response_body = minify(render_to_string) } end 

Cela fonctionne parfaitement. Bien sûr, la clé est la méthode minify . Vous trouverez beaucoup de minifiers JS. Par exemple, vous pouvez utiliser celui-ci (bien si le permis le permet): http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb – il est basé sur le jsmin.c de Crockford.

Si vous mettez ce fichier dans votre lib, vous l'exigez, votre méthode de minify peut ressembler à ceci:

 def minify(content) min = Smurf::Javascript.new(content) min.minified end 

J'espère que cela vous a aidé.

Si vous envisagez de minimiser automatiquement, vous devriez probablement aller pour un morceau de middleware. De manière surprenante, je n'ai pas pu en trouver (il y en a beaucoup pour le CSS / JS, mais il s'agit d'actifs statiques et non de contenus dynamiques), mais ce ne serait pas un problème pour l'écrire.

Pour Rails 4:

 render js: Uglifier.new.compile(render_to_string) 

Pour les rails 3 à l'aide de la méthode Uglifier intégrée (la valeur par défaut pour le pipeline d'actifs)

Voir le code de Radek ci-dessus et simplement échanger cela.

  def minify(content) Uglifier.new.compile(content) end