Есть ли способ заставить Yii2 перезагрузить модульные активы на любой запрос?
Вопрос
Мой сайт разделен на отдельные модули.Каждый модуль имеет свои собственные конкретные файлы CSS или JS.
AssetManager Yii создает папку, когда я сначала открываю страницу, которая использует мои активы.
К сожалению, если я изменю что-то в моих файлах Yii 1.x, не перезагружает файлы CSS или JS.
Я должен вручную удалить папку веб / активов.Это действительно раздражает, когда вы разрабатываете приложение.
Это работает, когда добавляю модуль в папку Backend, но не при создании модуля в папке поставщика с моим собственным пространством имен.
Решение
В отношении Yii1.x с assetManager
вы можете сделать это, установив атрибут «ForceCopy» to true в вашем файле конфигурации
... Скопируйте файлы и каталоги актива, даже если они уже опубликованы перед.Это свойство используется только во время этапа разработки
См. Документация ForceCopy здесь для получения дополнительной информации.
. В качестве альтернативы вы можете использовать linkAssets
, который не будет копировать файлы, но создавать программную ссылку между файлами активов и каталогам вашего активов.Вы, конечно, не можете использовать оба.
Для второй части вопроса, который я предполагаю, что это в Yii 2.x, вы должны использовать ассистенты, вы можете зарегистрировать любое изменение пространства имен из любого места, вы просто зарегистрируете его в поле зрения с тем, как это
.use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
. Другие советы
в Yii2 Вы можете добавить временную метку на URL-адресам активов, как это ...
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];
.
Это не заставит активы перезагрузить каждый запрос, но всякий раз, когда файл активов изменяется, URL-адрес изменится из-за того, что Timestamp, и это заставит повторно опубликовать актива.
Вы можете установить forceCopy = true
.
class Assets extends AssetBundle{
public function init()
{
parent::init();
$this->publishOptions['forceCopy'] = true;
}
}
.