すべてのリクエストでモジュールアセットをリロードするようにYii2を強制する方法はありますか?

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

  •  21-12-2019
  •  | 
  •  

質問

私のウェブサイトは別々のモジュールに分かれています。すべてのモジュールには、特定のCSSまたはJSファイルが独自のCSSファイルまたはJSファイルです。
YiiのAssetManager私が最初に私の資産を使用するページを開くとフォルダが作成されます。

残念ながら私のファイルで何かを変更した場合、Yii 1.xはCSSファイルまたはJSファイルをリロードしません。

私は手動でWeb / Assetsフォルダを削除する必要があります。あなたがアプリを開発しているとき、それは本当に厄介です。

バックエンドフォルダにモジュールを追加すると機能しますが、自分のネームスペースを使用してベンダーフォルダにモジュールを作成している場合は機能しません。

役に立ちましたか?

解決

assetManagerを使用したYII1.xでは、設定ファイル

で 'forcecopy'属性をtrueに設定することでこれを行うことができます。

...すでに公開されていても、資産ファイルとディレクトリをコピーする 前。このプロパティは開発段階でのみ使用されます。

Forcecopyのドキュメントを参照してください。P>

代わりに、ファイルをコピーしないが、資産ファイルとAssetsディレクトリの間にソフトリンクを作成することができます。もちろん使用できません。

これをyii 2.xにあると仮定している質問の2番目の部分では、Assetbundlesを使用することになっています、あなたはどこからでもネームスペースバンドルを登録することができます、あなたは単にこのようなものと共にそれを登録するだけです

use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
.

他のヒント

YII2では、このような資産のURLにタイムスタンプを追加することができます...

return [
    // ...
    'components' => [
        'assetManager' => [
            'appendTimestamp' => true,
        ],
    ],
];
.

資産はすべてのリクエストをリロードするようにされませんが、資産ファイルが変更されるたびに、TimestampのためにURLが変わります&それは資産を再公開するように強制されます。

forceCopy = trueを設定できます。

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top