모든 요청에 대해 yii2를 강제로 모듈 자산을 다시로드하도록 강요 할 수있는 방법이 있습니까?
문제
내 웹 사이트는 별도의 모듈로 나뉩니다.모든 모듈에는 자체 특정 CSS 또는 JS 파일이 있습니다.
yii의 AssetManager는 처음으로 자산을 사용하는 페이지를 처음 열면 폴더를 만듭니다.
불행히도 내 파일에서 무언가를 변경하면 Yii 1.x는 CSS 또는 JS 파일을 다시로드하지 않습니다.
웹 / 자산 폴더를 수동으로 삭제해야합니다.앱을 개발할 때 정말 짜증나게됩니다.
이것은 백엔드 폴더에 모듈을 추가 할 때 작동하지만 내 네임 스페이스가있는 공급 업체 폴더에 모듈을 만들 때는 작동하지 않을 때 작동합니다.
해결책
assetManager
를 사용하여 yii1.x와 관련하여 'forceCopy'속성을 구성 파일에서 true로 설정 하여이 작업을 수행 할 수 있습니다
... 이미 게시 된 경우에도 자산 파일과 디렉토리를 복사하십시오. 전에.이 속성은 개발 단계에서만 사용됩니다
forcepopy 문서를 참조하십시오. 자세한 정보는 여기
또는 파일을 복사하지 않고 자산 파일과 해당 자산 디렉토리간에 소프트 링크를 만드는 linkAssets
를 사용할 수 있습니다.당신은 물론 둘 다 사용할 수 없습니다.
이 문제의 두 번째 부분에 대해서는 이것이 yii 2.x에 있다고 가정하고있는 경우 자산 벨던을 사용하도록되어 있지 않으면 어디서나 namespace 번들을 등록 할 수 있습니다.이
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
. 다른 팁
yii2에서는 이와 같은 자산의 URL에 타임 스탬프를 추가 할 수 있습니다 ...
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];
.
이는 자산이 모든 요청에 재 장전되지만 자산 파일이 변경 될 때마다 URL이 변경 될 때마다 URL이 변경 될 것이며, 이는 자산이 재발행 될 것입니다.
forceCopy = true
를 설정할 수 있습니다.
class Assets extends AssetBundle{
public function init()
{
parent::init();
$this->publishOptions['forceCopy'] = true;
}
}
.