关于asset合并与压缩 [ 技术分享 ]
小弟我前不久试了下用asset命令行来合并压缩资源包文件,有以下几点经验分享下:
Yii默认使用Closure Compiler来合并JavaScript文件, 使用YUI Compressor来合并CSS文件, 你应手工安装这些工具或修改选项使用你喜欢的工具。
我是采用yii默认的压缩工具Closure Compiler和YUI Compressor来实现的。 由于closuer编译器和YUI编译器都是java实现的,所有需要先安装下JDK。下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html JDK在windows下的环境配置,我就不多说了。
下面说下怎么安装closuer编译器和YUI编译器
通过composer来下载安装相应的包
composer require "nervo/yuicompressor": "dev-master"
composer "crisu83/closurecompiler-bin": "dev-master"
下载完编译器后执行控制台命令:
控制台入口文件windows下为yii.bat
,关于控制台使用方法我也不多说了。
通过console创建assets需要打包的template文件,使用asset命令,如:yii asset/template console/template/test-template.php
这样就生成了一个test-template.php模版文件 该模版文件代码如下:
return[
// Adjust command/callback for JavaScript files compressing:
'jsCompressor' => 'java -jar compiler.jar --js {from} --js_output_file {to}',
// Adjust command/callback for CSS files compressing:
'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}',
// The list of asset bundles to compress:
'bundles' => [
// 'app\assets\AppAsset',
// 'yii\web\YiiAsset',
// 'yii\web\JqueryAsset',
],
// Asset bundle for compression output:
'targets' => [
'all' => [
'class' => 'yii\web\AssetBundle',
'basePath' => '@webroot/assets',
'baseUrl' => '@web/assets',
'js' => 'js/all-{hash}.js',
'css' => 'css/all-{hash}.css',
],
],
// Asset manager configuration:
'assetManager' => [
//'basePath' => '@webroot/assets',
//'baseUrl' => '@web/assets',
],
]
现在就需要对生成好的test-template.php文件做适当修改:
return[
// Adjust command/callback for JavaScript files compressing:
'jsCompressor' => 'java -jar vendor\crisu83\closurecompiler-bin\build\compiler.jar --js {from} --js_output_file {to}',
// Adjust command/callback for CSS files compressing:
'cssCompressor' => 'java -jar vendor\nervo\yuicompressor\yuicompressor.jar --type css {from} -o {to}',
// The list of asset bundles to compress:
'bundles' => [
'frontend\assets\CommonAsset'
],
// Asset bundle for compression output:
'targets' => [
'all' => [
'class' => 'yii\web\AssetBundle',
'basePath' => 'themes\web',
'baseUrl' => '',
'js' => 'js/all-{hash}.js',
'css' => 'css/all-{hash}.css',
],
],
// Asset manager configuration:
'assetManager' => [
'basePath' => __DIR__,
'baseUrl' => '',
],
]
此处是对frontend\assets\CommonAsset资源包进行压缩,并指明closuer编译器和YUI编译器的路径
注意: 由于在控制台应用别名 @webroot and @web 不可用,应在配置中明确指定它们。
最后,需要被压缩的样本文件已经修改好了,接下来就是根据样本文件执行生成对应的压缩js和css文件,以及assets文件common_compressed.php
,执行这条命令即可yii asset console/template/test-template.php themes/assets/common_compressed.php
就这样,合并压缩就完成了,只需引用common_compressed.php文件即可
'assetManager' => [
'bundles' => require dirname(dirname(__DIR__)) . '/themes/assets/common_compressed.php',
],
共 4 条回复
itan丶M 杭州
最后登录:2017-01-23
在线时长:32小时58分
- 粉丝15
- 金钱5854
- 威望0
- 积分6174