Gibt es eine Möglichkeit, Yii2 zu zwingen, Modul-Assets bei jeder Anfrage neu zu laden?
Frage
Meine Website ist in separate Module unterteilt.Jedes Modul hat seine eigenen spezifischen CSS- oder JS-Dateien.
Yiis AssetManager erstellt einen Ordner, wenn ich zum ersten Mal eine Seite öffne, die meine Assets verwendet.
Leider, wenn ich etwas in meinen Dateien ändere Yii 1.x lädt meine CSS- oder JS-Dateien nicht neu.
Ich muss den Ordner Web / Assets manuell löschen.Es ist wirklich nervig, wenn Sie die App entwickeln.
Dies funktioniert, wenn ich dem Backend-Ordner ein Modul hinzufüge, aber nicht, wenn ich ein Modul im Herstellerordner mit meinem eigenen Namespace erstelle.
Lösung
in Bezug auf yii1.x mit assetManager
können Sie dies tun, indem Sie in Ihrer Konfigurationsdatei "forcecopy 'Attribute" einstellen, um in Ihrer Konfigurationsdatei
... kopieren Sie die Asset-Dateien und -verzeichnisse, auch wenn sie bereits veröffentlicht werden Vor.Diese Eigenschaft wird nur während der Entwicklungsstufe verwendet
siehe forcecopy dokumentation hier für weitere Informationen.
Alternativ können Sie linkAssets
verwenden, der die Dateien nicht kopiert, sondern einen Soft-Link zwischen Ihren Asset-Dateien und Ihrem Assets-Verzeichnis erstellen.Sie können natürlich nicht beide verwenden.
für den zweiten Teil der Frage Ich gehe davon aus, dass dies in YII 2.x ist. Sie sollen Assetbundles verwenden, Sie können jedes Namespace-Bundle von überall an registrieren. Sie registrieren es einfach in der Ansicht mit einigen so
generasacodicetagpre.Andere Tipps
In YII2 können Sie einen Zeitstempel an die URLs von Assets so anhängen ...
generasacodicetagpre.Dies zwingt das Vermögen nicht, auf jede Anforderung zu laden, aber wenn eine Asset-Datei jedoch geändert wird, ändert sich die URL aufgrund des Zeitstempels, und das wird das Event anwenden, das neu veröffentlicht wird.
Sie können einstellen forceCopy = true
.
class Assets extends AssetBundle{
public function init()
{
parent::init();
$this->publishOptions['forceCopy'] = true;
}
}