¿Hay alguna manera de obligar a Yii2 a recargar los activos del módulo en cada solicitud?
Pregunta
Mi sitio web está dividido en módulos separados.Cada módulo tiene sus propios archivos css o js específicos.
El AssetManager de Yii crea una carpeta cuando abro por primera vez una página que usa mis activos.
Desafortunadamente, si cambio algo en mis archivos, Yii 1.x no recarga mis archivos css o js.
Tengo que eliminar manualmente la carpeta web/activos.Es realmente molesto cuando estás desarrollando la aplicación.
Esto funciona cuando agrego un módulo a la carpeta backend, pero no cuando creo un módulo en la carpeta del proveedor con mi propio espacio de nombres.
Solución
Con respecto a yii1.x con assetManager
, puede hacer esto configurando el atributo 'ForCecopy' a VERDADERO en su archivo de configuración
... copie los archivos de activos y los directorios incluso si ya publican antes de.Esta propiedad se utiliza solo durante la etapa de desarrollo
Ver ForCecopy Documentation aquí para más información.
Alternativamente, puede usar linkAssets
, que no copiará los archivos, sino que creará un enlace suave entre los archivos de su activo y el directorio de los activos.Por supuesto, no puedes usar ambos.
Para la segunda parte de la pregunta que estoy asumiendo que esto está en YII 2.x, se supone que debe usar Assetbundles, puede registrar cualquier paquete de espacio de nombres desde cualquier lugar, simplemente lo registre en la vista con algunos como este
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
Otros consejos
En yii2 puede agregar una marca de tiempo a las URLS de los activos como este ...
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];
Esto no forzará los activos a recargar en cada solicitud, pero siempre que se cambie el archivo de activos, la URL cambiará debido a la marca de tiempo y que obligará al activo a ser reeditado.
Puedes configurar forceCopy = true
.
class Assets extends AssetBundle{
public function init()
{
parent::init();
$this->publishOptions['forceCopy'] = true;
}
}