Yii 2.0.14 通过内置 asset 命令在构建期预处理合并压缩 JS/CSS,需配置 assets.php 指定压缩器命令、Bundle 列表,并执行 ./yii asset 生成生产配置,最后在 main.php 中启用 assets-prod.php。

Yii 2.0.14 中实现资源文件(JS/CSS)的合并与压缩,核心依赖内置的 asset 命令工具,配合外部压缩器(如 YUI Compressor 或 Closure Compiler)完成。该方案不依赖运行时动态压缩,而是构建期预处理,兼顾性能与可控性。
确认 asset 命令可用性
确保项目根目录下存在可执行的 yii 脚本(控制台入口),且已正确配置环境别名(尤其是 @webroot)。若未初始化 asset 配置,先运行:
-
./yii asset/template assets.php—— 生成基础模板 - 将生成的
assets.php移至console/config/或项目根目录,并按需调整路径别名
配置压缩器命令(以 YUI Compressor 为例)
编辑 assets.php,指定 JS 和 CSS 的压缩命令。注意路径需真实存在,且 Java 环境已就绪:
'jsCompressor' => 'java -jar /path/to/yuicompressor.jar --type js {from} -o {to}''cssCompressor' => 'java -jar /path/to/yuicompressor.jar --type css {from} -o {to}'- 若使用 Node.js 工具(如 terser、clean-css),可替换为对应 CLI 命令,例如:
'jsCompressor' => 'npx terser {from} -o {to} --compress --mangle'
明确要打包的 AssetBundle 列表
在 assets.php 的 'bundles' 键中,列出需合并压缩的类名。常见组合包括:
-
'app\assets\AppAsset'(你自定义的主资源包) -
'yii\web\YiiAsset'(Yii 核心 JS) -
'yii\web\JqueryAsset'(jQuery,若未用 CDN) - 避免无意义地加入仅用于后台或调试的包(如
yii\debug\DebugAsset)
执行压缩并部署输出
运行命令生成压缩后资源:
./yii asset assets.php frontend/config/assets-prod.php- 该命令会扫描所有指定 Bundle 的
js和css文件,合并、压缩,并写入frontend/config/assets-prod.php - 随后在
frontend/config/main.php中启用该配置:'assetManager' => ['bundles' => require __DIR__ . '/assets-prod.php'] - 注意:生产环境应禁用
YII_DEBUG,否则 assetManager 可能跳过压缩版本
整个流程无需修改业务代码,只需一次构建、配置生效。压缩后的文件默认存放在 @webroot/assets/ 下,由 Yii 自动管理版本哈希与引用。


















