[英]Yii2 assets clear cache
每次我更新infoweb \\ menu \\ module \\ assets中的css或js文件時,我都要清空后端\\ web \\ assets文件夾
有沒有辦法自動清除資產緩存?
還有其他財產
if (YII_ENV_DEV) {
...;
...;
...;
$config['components']['assetManager']['forceCopy'] = true;
...;
...;
}
即使之前發布過,也要發布文件
在您的視圖中添加此內容:
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
在您的配置中添加:
'components' => [
'assetManager' => [
'linkAssets' => true,
],
]
清空資產文件夾,並刷新,完成
如果您的環境是生產我建議使用緩存清除 :
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];
有關資產的更多信息,請閱讀Assets Yii2文檔 。
如果您正在開發自己的插件,則可以強制每個捆綁包發布資產(注意:應該設置$ 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,
];
}
我在視圖文件中使用CClientScript::registerScriptFile
方法:
Yii::app()->clientScript->registerScriptFile(
$this->getAssetsBase() . '/js/script.js'
);
如果我修改了script.js,在下一頁重新加載后,我將看到所有更改
對於css文件 - CClientScript::registerCssFile
Yii::app()->clientScript->registerCssFile(
$this->getAssetsBase() . '/css/style.css'
);
更新:如果您使用yii 2.0 beta,您可以在此處閱讀有關客戶端幫助程序機制更改的一些信息: link
AssetManager將根據文件修改時間創建哈希。 更改任何文件時,目錄的修改時間不會更改。 如果您的AssetBundle具有$sourcePath
目錄,則使用目錄的修改時間,哈希不會更改,並且不會將任何內容復制到web/assets
目錄。
我建議在子類中覆蓋AssetManager::hash()
或為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
}
],
]
有關查找捆綁中所有資產文件的最大修改日期的示例實現,您可以通過wookie @ http://php.net/manual/en/function.filemtime.php#35779查看此評論。
請注意,對任何資產文件的修改將在web/assets
創建一個新目錄,並且仍需要定期清理。 但是,除了瀏覽器緩存之外,刷新頁面將遵循最新的更改。
我在main-local.php中為這樣的開發環境配置了assetManager::forceCopy=true
return [
'components' => [
...
'assetManager' => [
'forceCopy' => true,
]
...
],
];
sudo rm -rf frontend/web/assets/*
sudo chmod 777 frontend/web/assets
./yii cache/flush-all
如果這不起作用:
sudo rm -rf vendor/*
composer install
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.