2011-08-11 17 views
5

cuando compruebo el origen de la página html, las etiquetas HTML y el contenido de texto se comprimen sin línea en blanco, pero en línea javascript.¿Cómo hacer que la plantilla de Jade comprima javascript en línea automáticamente?

+2

tuve este problema también, y no creía que era lo suficientemente importante como para comprimirlo a mano. Uglifying el javascript sería más útil en mi humilde opinión. Pero me gustaría añadir que los puntos y comas no son necesarios en javascript, y la compresión de javascript en línea automáticamente necesitaría primero analizar y entender qué lugares necesitan punto y coma. – TiansHUo

Respuesta

4

No estoy seguro y aún no lo he probado, pero puede agregar un filtro y utilizar UglifyJS. Por ejemplo

var uglyParser = require("uglify-js").parser; 
var uglyUgly = require("uglify-js").uglify; 

var uglify = function(str) { 
    var ast = uglyParser.parse(str); 
    ast = uglyUgly.ast_mangle(ast); 
    ast = uglyUgly.ast_squeeze(ast); 
    return uglyUgly.gen_code(ast); 
} 

Para ser honesto, no estoy seguro de dónde poner que en jade por lo que es tratado como un filtro. Por ahora deberías poder pegarlo en https://github.com/visionmedia/jade/blob/master/lib/filters.js.

El uso en jade sería entonces:

script(type="text/javascript") 
    :uglify 
    <Your JavaScript Code> 

De nuevo, no se han probado. Pero creo que debería funcionar. Lo probaré más tarde hoy.

5

Acaba de ser descubierto algo que funciona para mí en Jade v0.30.0:

  1. Cambiar el nombre de su archivo con una extensión .js .uglify
  2. En la plantilla de Jade, el uso:

    include name-of-javascript-file.uglify 
    

Por qué funciona: Investigando en el código fuente de Jade, descubrí un archivo llamado filters.js. Allí, verá una dependencia en transformers. En lib/transformers.js (del módulo de transformadores), verá las diversas utilidades de transformación, incluido uglify. Aparentemente, Jade llamará a cualquiera de esos transformadores si coincide con la extensión de archivo correcta en su declaración include.

+0

Muy extraño, ¿cómo funciona esto? ¿Hay alguna posibilidad de que haya una publicación en el blog que pueda leer? – Costa

+0

¡Fascinante! ¿Y este es un comportamiento intencional y no se remendará en ningún momento? – Scotty

+0

no funciona con pug :( – sarkiroka

1

Según the docs, puede utilizar cualquier JSTransformer como filtro de jade. Así, en las que normalmente hacer esto a inline JS:

script. 
    (function doSomething() { … })(); 

las que debe hacerlo de esta manera:

script 
    :uglify-js 
    (function doSomething() { … })(); 
+0

Funciona perfectamente, gracias! –

Cuestiones relacionadas