Existe-t-il un moyen de forcer Yii2 à recharger les actifs du module à chaque requête ?

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

  •  21-12-2019
  •  | 
  •  

Question

Mon site Web est divisé en modules distincts.Chaque module possède ses propres fichiers CSS ou JS spécifiques.
AssetManager de Yii crée un dossier lorsque j'ouvre pour la première fois une page qui utilise mes actifs.

Malheureusement, si je change quelque chose dans mes fichiers, Yii 1.x ne recharge pas mes fichiers CSS ou JS.

Je dois supprimer manuellement le dossier web/assets.C'est vraiment ennuyeux lorsque vous développez l'application.

Cela fonctionne lorsque j'ajoute un module au dossier backend, mais pas lorsque je crée un module dans le dossier fournisseur avec mon propre espace de noms.

Était-ce utile?

La solution

Par rapport à Yii1.x Avec assetManager vous pouvez le faire en définissant l'attribut 'forceCopy' sur true dans votre fichier de configuration

...Copiez les fichiers et répertoires d'actifs même s'ils ont déjà publié auparavant.Cette propriété est utilisée uniquement pendant la phase de développement

Voir la documentation forceCopy ici pour plus d'informations.

Alternativement, vous pouvez utiliser linkAssets qui ne copiera pas les fichiers mais créera un lien souple entre vos fichiers d'actifs et le vôtre répertoire d'actifs.Vous ne pouvez bien sûr pas utiliser les deux.

Pour la deuxième partie de la question, je suppose que c'est dans Yii 2.x, vous êtes censé utiliser AssetBundles, vous pouvez enregistrer n'importe quel bundle d'espace de noms de n'importe où, vous l'enregistrez simplement dans la vue avec certains comme celui-ci.

use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);

Autres conseils

Dans Yii2, vous pouvez ajouter un horodatage aux URL des actifs tels que celui-ci ...

return [
    // ...
    'components' => [
        'assetManager' => [
            'appendTimestamp' => true,
        ],
    ],
];

Cela ne forcera pas les actifs à recharger sur chaque demande, mais chaque fois qu'un fichier d'actif est modifié, l'URL changera à cause de l'horodatage et qui obligera l'actif à réinterviser.

Vous pouvez définir forceCopy = true.

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top