Есть ли способ заставить Yii2 перезагрузить модульные активы на любой запрос?

StackOverflow https://stackoverflow.com//questions/25054806

  •  21-12-2019
  •  | 
  •  

Вопрос

Мой сайт разделен на отдельные модули.Каждый модуль имеет свои собственные конкретные файлы 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;
    }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top