itan丶M 2015-05-06 17:49:27 8949次浏览 4条回复 5 6 0

小弟我前不久试了下用asset命令行来合并压缩资源包文件,有以下几点经验分享下:

Yii默认使用Closure Compiler来合并JavaScript文件, 使用YUI Compressor来合并CSS文件, 你应手工安装这些工具或修改选项使用你喜欢的工具。

我是采用yii默认的压缩工具Closure CompilerYUI 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 不可用,应在配置中明确指定它们。

最后,需要被压缩的样本文件已经修改好了,接下来就是根据样本文件执行生成对应的压缩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',
    ],
    
觉得很赞
您需要登录后才可以回复。登录 | 立即注册