YUI Compressor 不再歸屬于雅虎。這就是為什么除非特別必要,否則強(qiáng)烈建議你避免使用 YUI 實(shí)用程序。閱讀如何裁剪 CSS/JS 文件(使用 UglifyJS 和 UglifyCSS)來尋求一種更新的現(xiàn)代的的替代品。
雅虎提供了一款優(yōu)秀的壓縮 JavaScripts 和 stylesheets 的實(shí)用工具這樣他們就可以在線路中傳輸?shù)母炝?,這就是 YUI Compressor。多虧了 Assetic,你可以很好的很容易的利用這個(gè)工具。
YUI Compressor 是由 Java 編寫的并且以 JAR 文件格式發(fā)布。從雅虎的網(wǎng)站下載 JAR 文件將它保存到 app/Resources/java/yuicompressor.jar。
現(xiàn)在你需要在你的應(yīng)用程序中設(shè)置兩個(gè) Assetic 過濾器,一個(gè)用來使用 YUI Compressor 來壓縮 JavaScripts,另一個(gè)用來壓縮 stylesheets:
YAML:
# app/config/config.yml
assetic:
# java: "/usr/bin/java"
filters:
yui_css:
jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
yui_js:
jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
XML:
<!-- app/config/config.xml -->
<assetic:config>
<assetic:filter
name="yui_css"
jar="%kernel.root_dir%/Resources/java/yuicompressor.jar" />
<assetic:filter
name="yui_js"
jar="%kernel.root_dir%/Resources/java/yuicompressor.jar" />
</assetic:config>
PHP:
// app/config/config.php
$container->loadFromExtension('assetic', array(
// 'java' => '/usr/bin/java',
'filters' => array(
'yui_css' => array(
'jar' => '%kernel.root_dir%/Resources/java/yuicompressor.jar',
),
'yui_js' => array(
'jar' => '%kernel.root_dir%/Resources/java/yuicompressor.jar',
),
),
));
Windows 用戶需要記住升級(jí)設(shè)置來適應(yīng) Java 位置。在 Windows 7 64 位系統(tǒng)中默認(rèn)目錄是 C:\Program Files (x86)\Java\jre6\bin\java.exe。
現(xiàn)在你可以在你的應(yīng)用程序中訪問兩個(gè)新的 Assetic 過濾器:yui_css 和 yui_js。這些將會(huì)使用 YUI Compressor 來分別壓縮 stylesheets 和 JavaScripts。
現(xiàn)在你已經(jīng)設(shè)置了 YUI Compressor,但是在你的資產(chǎn)上應(yīng)用這些過濾器之前什么都不會(huì)發(fā)生。由于你的資產(chǎn)是視圖層的一部分,這個(gè)工作已經(jīng)在你的模板中做完了:
Twig:
{% javascripts '@AppBundle/Resources/public/js/*' filter='yui_js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
PHP:
<?php foreach ($view['assetic']->javascripts(
array('@AppBundle/Resources/public/js/*'),
array('yui_js')
) as $url): ?>
<script src="<?php echo $view->escape($url) ?>"></script>
<?php endforeach ?>
上述例子假設(shè)你已經(jīng)有了名為 AppBundle 的 bundle 并且你的 JavaScript 文件在你的 bundle 下的 Resources/public/js 目錄下。盡管這并不是很重要——你可以包括 JavaScript 文件無論它們?cè)谀摹?
在為上述的 asset 標(biāo)簽增加了 yui_js 過濾器之后,你應(yīng)該可以看到壓縮過的 JavaScript 文件在線路中傳輸?shù)母炝?。可以采用相同的過程來壓縮你的 stylesheets。
Twig:
{% stylesheets '@AppBundle/Resources/public/css/*' filter='yui_css' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}
PHP:
<?php foreach ($view['assetic']->stylesheets(
array('@AppBundle/Resources/public/css/*'),
array('yui_css')
) as $url): ?>
<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $view->escape($url) ?>" />
<?php endforeach ?>
壓縮過的 JavaScripts 和 stylesheets 文件很難被讀取,更不必說是調(diào)試模式。因?yàn)檫@個(gè),當(dāng)你的應(yīng)用程序在調(diào)試模式的時(shí)候資產(chǎn)需要你禁用一些過濾器。你可以通過預(yù)先添加問號(hào):?修改你的模板中的過濾器的名稱來達(dá)到這個(gè)目的。這就可以告訴 Assetic 只有在調(diào)試模式關(guān)閉的時(shí)候才開啟這些過濾器。
Twig:
{% javascripts '@AppBundle/Resources/public/js/*' filter='?yui_js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
PHP:
<?php foreach ($view['assetic']->javascripts(
array('@AppBundle/Resources/public/js/*'),
array('?yui_js')
) as $url): ?>
<script src="<?php echo $view->escape($url) ?>"></script>
<?php endforeach ?>
為了替代在 asset 標(biāo)簽添加過濾器,你也可以通過添加過濾器設(shè)置中的 apply_to 來通通禁用,例如在 yui_js 過濾器的 apply_to: ".js$"。在產(chǎn)品中僅僅使用過濾器,添加這個(gè)到 config_prod 文件而不是通用設(shè)置文件。更多詳細(xì)的通過文件擴(kuò)展應(yīng)用過濾器,參見基于文件擴(kuò)展的過濾器應(yīng)用。