return [ 'components' => [ 'assetManager' => [ 'bundles' => require(__DIR__ . 'https://www.jb51.net/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')), ], ], ];
如上所示,在产品上线模式下资源包数组存储在assets-prod.php文件中,不是产品上线模式存储在assets-dev.php文件中。
使用 asset 命令
Yii提供一个名为asset控制台命令来使上述操作自动处理。
为使用该命令,应先创建一个配置文件设置哪些资源包要合并以及分组方式,可使用asset/template 子命令来生成一个模板, 然后修改模板成你想要的。
yii asset/template assets.php
该命令在当前目录下生成一个名为assets.php的文件,文件的内容类似如下:
<?php /** * 为控制台命令"yii asset"使用的配置文件 * 注意在控制台环境下,一些路径别名如 '@webroot' 和 '@web' 不会存在 * 请定义不存在的路径别名 */ return [ // 为JavaScript文件压缩修改 command/callback 'jsCompressor' => 'java -jar compiler.jar --js {from} --js_output_file {to}', // 为CSS文件压缩修改command/callback 'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}', // 要压缩的资源包列表 'bundles' => [ // 'yii\web\YiiAsset', // 'yii\web\JqueryAsset', ], // 资源包压缩后的输出 'targets' => [ 'all' => [ 'class' => 'yii\web\AssetBundle', 'basePath' => '@webroot/assets', 'baseUrl' => '@web/assets', 'js' => 'js/all-{hash}.js', 'css' => 'css/all-{hash}.css', ], ], // 资源管理器配置: 'assetManager' => [ ], ];
应修改该文件的bundles的选项指定哪些包你想要合并,在targets选项中应指定这些包如何分组,如前述的可以指定一个或多个组。
注意: 由于在控制台应用别名 @webroot and @web 不可用,应在配置中明确指定它们。
JavaScript文件会被合并压缩后写入到js/all-{hash}.js文件,其中 {hash} 会被结果文件的哈希值替换。
jsCompressor 和 cssCompressor 选项指定控制台命令或PHP回调函数来执行JavaScript和CSS合并和压缩, Yii默认使用Closure Compiler来合并JavaScript文件, 使用YUI Compressor来合并CSS文件, 你应手工安装这些工具或修改选项使用你喜欢的工具。
根据配置文件,可执行asset 命令来合并和压缩资源文件并生成一个新的资源包配置文件assets-prod.php:
yii asset assets.php config/assets-prod.php
您可能感兴趣的文章: