Razor0077x
@Razor0077x
Говнокодер

Сжатие CSS и JS ресурсов в Yii2 по группам?

День добрый, вопрос следующий:

Сжимаю ресурсы по инструкции, такой конфиг:

/**
 * Configuration file for the "yii asset" console command.
 */

// In the console environment, some path aliases may not exist. Please define these:
Yii::setAlias('@webroot', realpath(__DIR__ . '/../web'));
Yii::setAlias('@web', '/');

return [
    // Adjust command/callback for JavaScript files compressing:
    'jsCompressor' => 'java -jar optimize/closure-compiler-v20210505.jar --js {from} --js_output_file {to}',
    // Adjust command/callback for CSS files compressing:
    'cssCompressor' => 'java -jar optimize/yuicompressor.jar --type css {from} -o {to}',
    // Whether to delete asset source after compression:
    'deleteSource' => true,
    // The list of asset bundles to compress:
    'bundles' => [
        'yii\web\YiiAsset',
	/*другие бандлы*/
    ],
    // Asset bundle for compression output:
   'targets' => [
        'app\\assets\\CompressedAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/main-{hash}.js',
            'css' => 'css/main-{hash}.css',
        ],
    ],

    // Asset manager configuration:
    'assetManager' => [
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web/assets',
    ],
];


Всё прекрасно работает

Но, при попытке разбить ресурсы по группам вот так:

'targets' => [
        'app\\assets\\MainAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/main-{hash}.js',
            'css' => 'css/main-{hash}.css',
            'depends' => [
                'yii\web\YiiAsset',
            ],
        ],
        'app\\assets\\CalcAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/main-{hash}.js',
            'css' => 'css/main-{hash}.css',
            'depends' => [
                'app\assets\AppAsset'
            ],
        ],
        'app\\assets\\ContactAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/main-{hash}.js',
            'css' => 'css/main-{hash}.css',
            'depends' => [
                'yii\widgets\ActiveFormAsset',
                'yii\validators\ValidationAsset',
            ],
        ],
    ],


На этапе создания файла ловлю ошибку в консоли:

Creating new bundle configuration...
Error: Invalid argument supplied for foreach()

Кто-нибудь сталкивался с этим? Куда копать?
  • Вопрос задан
  • 394 просмотра
Решения вопроса 1
Razor0077x
@Razor0077x Автор вопроса
Говнокодер
Разобрался

Бандл, который подрубается на каждой странице (Yii, Jqeury и т.д.) нужно указать без зависимостей

'targets' => [
        'app\\assets\\CompressCalcAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/calc-{hash}.js',
            'css' => 'css/calc-{hash}.css',
            'depends' => [
                'app\assets\CalcAsset',
            ],
        ],
        'app\\assets\\ContactAsset' => [
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/contact-{hash}.js',
            'css' => 'css/contact-{hash}.css',
            'depends' => [
                'yii\widgets\ActiveFormAsset',
                'yii\validators\ValidationAsset',
            ],
        ],
        'app\\assets\\MainAsset' => [           //критический бандл
            'class' => 'yii\web\AssetBundle',
            'basePath' => '@webroot',
            'baseUrl' => '@web',
            'js' => 'js/main-{hash}.js',
            'css' => 'css/main-{hash}.css',
            'depends' => [],
        ],
    ],
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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