Каждый раз, когда я обновляю свои файлы css или js в infoweb \ menu \ module \ assets, я должен очистить папку backend \ web \ assets
есть ли способ автоматически очистить кеш ресурсов?
есть дополнительное свойство, поскольку
if (YII_ENV_DEV) { ...; ...; ...; $config['components']['assetManager']['forceCopy'] = true; ...; ...; }
публиковать файлы, даже если они опубликованы ранее
Добавьте это в ваш взгляд:
use vendor\myVendorName\myPackageName\assets\AppAsset; AppAsset::register($this);
Добавьте это в свой конфиг:
'components' => [ 'assetManager' => [ 'linkAssets' => true, ], ]
Пустая папка с ресурсами и обновление.
Если вы разрабатываете свой собственный плагин, вы можете принудительно опубликовать активы на один пакет (обратите внимание: $ sourcePath должен быть установлен)
<?php namespace app\components\forms\redactorAssets; use yii\web\AssetBundle; class RedactorCutAsset extends AssetBundle { public $sourcePath = '@app/components/forms/redactorAssets/assets'; public $js = [ 'cut.js', ]; public $publishOptions = [ 'forceCopy'=>true, ]; }
Если вы работаете в области окружающей среды, я рекомендую использовать Cache Busting:
return [ // ... 'components' => [ 'assetManager' => [ 'appendTimestamp' => true, ], ], ];
для получения дополнительной информации об активах прочтите документацию по активам Yii2 .
Я использую CClientScript::registerScriptFile
в своих файлах просмотра:
Yii::app()->clientScript->registerScriptFile( $this->getAssetsBase() . '/js/script.js' );
Если я изменил script.js, после следующей перезагрузки страницы я увижу все изменения
Для файлов css – CClientScript::registerCssFile
Yii::app()->clientScript->registerCssFile( $this->getAssetsBase() . '/css/style.css' );
ОБНОВЛЕНИЕ: если вы используете бета-версию yii 2.0, вы можете прочитать некоторую информацию об изменениях в механике клиентских помощников: link
AssetManager создаст хэш на основе времени изменения файла. Время изменения каталога не изменяется при изменении любого файла. Если у вас есть AssetBundle, у которого есть каталог в качестве источника $sourcePath
, используется время модификации каталога, хеш не изменится и ничего не будет скопировано в каталог web/assets
.
Я предлагаю переопределить AssetManager::hash()
в подклассе или написать функцию для AssetManager::$hashCallback
:
'components' => [ 'assetManager' => [ 'hashCallback' => function($path) { // if: $path is directory: figure out when files were changed in directory // else: use original hash function in \yii\web\AssetManager } ], ]
Для примерной реализации для определения максимальной измененной даты по всем файлам активов в комплекте вы можете посмотреть этот комментарий wookie @ http://php.net/manual/en/function.filemtime.php#35779
Обратите внимание, что изменение любого файла актива создаст новый каталог в web/assets
, и регулярная очистка останется необходимой. Однако кеширование браузера в стороне, обновление страницы будет следовать последним изменениям.
Я настраиваю assetManager::forceCopy=true
в main-local.php для среды dev, как это
return [ 'components' => [ ... 'assetManager' => [ 'forceCopy' => true, ] ... ], ];