YII2 Assets минификация и правильное подключение CSS и JS к проекту?

Здравствуйте!

Собственно вот такой вопрос: На проекте YII 2 есть класс AppAssets, в данном классе указаны css и js файлы которые должны быть подключены к проекту.

class AppAsset extends AssetBundle
{
    public $sourcePath = '@app/assets/themes/';

    public $css = [
        'css/normalize.css',
        'css/template_2.css',
        'css/template.css',
        'css/roboto.css',
        'css/jquery.selectbox.css',
        'css/jquery.ui.css',
        'css/icheck.css'
    ];

    public $js = [
        'js/vendors/jquery-1.7.2.min.js',
        'js/ui/jquery.ui.core.js',
        'js/ui/jquery.ui.widget.js',
        'js/ui/jquery.ui.autocomplete.js',
        'js/ui/jquery.ui.dialog.js',
        'js/vendors/jquery.maskedinput.js',
        'js/vendors/jquery.selectbox-0.2.min.js',
        'js/vendors/jquery.html5-placeholder-shim.js',
        'js/vendors/jquery.icheck.min.js',
        'js/vendors/underscore-min.js',
        'themes/smart_admin/theme/js/plugin/jquery-validate/jquery.validate.min.js',
        'js/public/common.js',
        'js/page/evac_request.js',
        'js/page/buy_cards.js'
    ];

    public $jsOptions = [
        'position' => \yii\web\View::POS_HEAD
    ];

    public $cssOptions = [
        'position' => \yii\web\View::POS_HEAD
    ];

    public $depends = [
        'yii\web\YiiAsset',
    ];

    public $publishOptions = [
        'forceCopy' => true
    ];
}


Далее есть настроенный файл для сборки, jar файлы компрессоров лежат в корне (compiler.jar и yuicompressor.jar)

Yii::setAlias('@webroot', __DIR__ . '/../web');
Yii::setAlias('@web', '/');

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' => [
        'app\assets\AppAsset' => [
            'basePath' => '@webroot/',
            'baseUrl' => '@web/',

            'css' => 'css/all-front-{hash}.css',
            'js' => 'js/all-front-{hash}.js',

            'depends' => [
                // Include all assets shared between 'backend' and 'frontend'
                'app\assets\AppAsset',
                'yii\web\YiiAsset',
                'yii\web\JqueryAsset'
            ],
        ],
    ],
    // Asset manager configuration:
    'assetManager' => [
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web/assets',
    ],
];


Компиляция запускается командой
sudo ./yii asset config/assets.php assets/assets_min.php


Нужные минифицированные файлы появляются где должны
  1. all-front-e9bcdd242e24b630ddff6b382bbc843c.css
  2. all-front-1bf96460d930621ec14c72db351fefc7.js


Однако, как не странно в итоговом assets_min.php эти минифицированные файлы не подключены, а за место них свалены все файлы проекта:
return [
    'app\\assets\\AppAsset' => [
        'class' => 'app\\assets\\AppAsset',
        'basePath' => '@webroot/',
        'baseUrl' => '@web/',
        'js' => [
            'js/vendors/jquery-1.7.2.min.js',
            'js/ui/jquery.ui.core.js',
            'js/ui/jquery.ui.widget.js',
            'js/ui/jquery.ui.autocomplete.js',
            'js/ui/jquery.ui.dialog.js',
            'js/vendors/jquery.maskedinput.js',
            'js/vendors/jquery.selectbox-0.2.min.js',
            'js/vendors/jquery.html5-placeholder-shim.js',
            'js/vendors/jquery.icheck.min.js',
            'js/vendors/underscore-min.js',
            'themes/smart_admin/theme/js/plugin/jquery-validate/jquery.validate.min.js',
            'js/public/common.js',
            'js/page/evac_request.js',
            'js/page/buy_cards.js',
        ],
        'css' => [
            'css/normalize.css',
            'css/template_2.css',
            'css/template.css',
            'css/roboto.css',
            'css/jquery.selectbox.css',
            'css/jquery.ui.css',
            'css/icheck.css',
        ],
    ],
    'yii\\web\\JqueryAsset' => [
        'sourcePath' => null,
        'js' => [],
        'css' => [],
        'depends' => [
            'app\\assets\\AppAsset',
        ],
    ],
    'yii\\web\\YiiAsset' => [
        'sourcePath' => null,
        'js' => [],
        'css' => [],
        'depends' => [
            'yii\\web\\JqueryAsset',
            'app\\assets\\AppAsset',
        ],
    ],
];


Вопрос состоит в том:
почему в assets_min.php не генерируются пути к минифицированным файлам, а просто общий список файлов?
  • Вопрос задан
  • 13727 просмотров
Решения вопроса 1
А если так?
...
// Asset bundle for compression output:
    'targets' => [
        'frontend' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot/',
            'baseUrl' => '@web/',

            'css' => 'css/all-front-{hash}.css',
            'js' => 'js/all-front-{hash}.js',

            'depends' => [
                // Include all assets shared between 'backend' and 'frontend'
                'app\assets\AppAsset',
                'yii\web\YiiAsset',
                'yii\web\JqueryAsset'
            ],
        ],
    ],
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы