2011-08-11 36 views
5

當我檢查html頁面源代碼時,HTML標籤和文本內容被壓縮而沒有空白和行,但內聯javascript。如何讓Jade模板自動壓縮內聯javascript?

+2

我有這個問題也並沒有認爲這是重要的,足以壓縮它手動。醜化JavaScript將更加有用恕我直言。但是我想補充一點,在javascript中不需要分號,並且自動壓縮內聯javascript需要先解析並理解哪些地方需要分號。 – TiansHUo

回答

4

我不確定它,還沒有測試過,但你可以probalby添加一個過濾器,並利用UglifyJS。例如

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); 
} 

說實話,我不知道,所以它作爲一個過濾器處理在何處放置在玉。現在你應該可以堅持在https://github.com/visionmedia/jade/blob/master/lib/filters.js

在玉的使用將被:

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

我又沒有測試它。但我認爲它應該起作用。我會在今天晚些時候測試它。

5

剛發現的東西,在玉v0.30.0對我的作品:

  1. 重命名您的.js有.uglify擴展文件
  2. 在你的玉模板,使用說明:

    include name-of-javascript-file.uglify 
    

原因:挖掘Jade源代碼,我發現了一個名爲的文件。在那裏,你會看到對transformers的依賴。在lib/transformers.js(變壓器模塊)中,您將看到各種變換實用程序,包括uglify。顯然,如果您在include聲明中匹配正確的文件擴展名,Jade將會呼叫這些變換器中的任何一個。

+0

很奇怪,這是如何工作的?有什麼機會可以閱讀我的博客文章? – Costa

+0

迷人!這是故意的行爲,不會在任何時候打補丁? – Scotty

+0

它沒有與帕格工作:( – sarkiroka

1

根據the docs,您可以使用任何JSTransformer作爲玉石過濾器。所以,你通常會做這種內聯JS:

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

你應該做這樣的:

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

完美的作品,謝謝! –