php - navegador - recargar y borrar cache chrome
Yii2 activos borrar caché (8)
Cada vez que actualizo mis archivos css o js en infoweb / menu / module / asset, tengo que vaciar la carpeta backend / web / asset
¿hay una manera de borrar automáticamente el caché de activos?
Agregue esto en su vista:
use vendor/myVendorName/myPackageName/assets/AppAsset;
AppAsset::register($this);
Agregue esto en su configuración:
''components'' => [
''assetManager'' => [
''linkAssets'' => true,
],
]
Vaciar carpeta de activos, y actualizar, listo
Configuré el assetManager::forceCopy=true
en main-local.php para el entorno dev como este
return [
''components'' => [
...
''assetManager'' => [
''forceCopy'' => true,
]
...
],
];
El AssetManager creará un hash basado en la hora de modificación del archivo. La hora de modificación de un directorio no cambia cuando se modifica cualquier archivo. Si tiene un AssetBundle que tiene un directorio como $sourcePath
, se $sourcePath
la hora de modificación del directorio, el hash no cambiará y nada se copiará en el directorio web/assets
.
Sugiero anular AssetManager::hash()
en una subclase o escribir una función para AssetManager::$hashCallback
:
''components'' => [
''assetManager'' => [
''hashCallback'' => function($path) {
// if: $path is directory: figure out when files were changed in directory
// else: use original hash function in /yii/web/AssetManager
}
],
]
Para una implementación de muestra para encontrar la fecha de modificación máxima de todos los archivos de activos en un paquete, puede ver este comentario en wookie @ http://php.net/manual/en/function.filemtime.php#35779
Tenga en cuenta que la modificación de cualquier archivo de activos creará un nuevo directorio en la web/assets
, y la limpieza regular seguirá siendo necesaria. Sin embargo, aparte del caché del navegador, la actualización de la página seguirá los últimos cambios.
Si está desarrollando su propio complemento, puede forzar la publicación de activos por paquete (nota: se debe establecer $ sourcePath)
<?php
namespace app/components/forms/redactorAssets;
use yii/web/AssetBundle;
class RedactorCutAsset extends AssetBundle {
public $sourcePath = ''@app/components/forms/redactorAssets/assets'';
public $js = [
''cut.js'',
];
public $publishOptions = [
''forceCopy''=>true,
];
}
Si su entorno es de producción, le recomiendo usar Cache Busting :
return [
// ...
''components'' => [
''assetManager'' => [
''appendTimestamp'' => true,
],
],
];
Para obtener más información sobre los activos, lea la documentación de Assets Yii2 .
hay propiedad adicional como
if (YII_ENV_DEV) {
...;
...;
...;
$config[''components''][''assetManager''][''forceCopy''] = true;
...;
...;
}
Para publicar archivos incluso allí se publican antes.
CClientScript::registerScriptFile
método CClientScript::registerScriptFile
en mis archivos de visualización:
Yii::app()->clientScript->registerScriptFile(
$this->getAssetsBase() . ''/js/script.js''
);
Si modifiqué script.js, después de la próxima carga de la página veré todos los cambios
Para archivos css - CClientScript::registerCssFile
Yii::app()->clientScript->registerCssFile(
$this->getAssetsBase() . ''/css/style.css''
);
ACTUALIZACIÓN: si usa yii 2.0 beta, puede leer información sobre los cambios en la mecánica de los ayudantes de clientes aquí: link
sudo rm -rf frontend/web/assets/*
sudo chmod 777 frontend/web/assets
./yii cache/flush-all
Si esto no funciona:
sudo rm -rf vendor/*
composer install