簡體   English   中英

Yii2資產清除緩存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM