¿Hay alguna manera de obligar a Yii2 a recargar los activos del módulo en cada solicitud?

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

  •  21-12-2019
  •  | 
  •  

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.

¿Fue útil?

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top