有没有办法强制 Yii2 在每次请求时重新加载模块资源?
题
我的网站分为多个单独的模块。每个模块都有自己特定的 css 或 js 文件。
当我第一次打开使用我的资源的页面时,Yii 的 assetManager 会创建一个文件夹。
不幸的是,如果我更改文件中的某些内容,Yii 1.x 不会重新加载我的 css 或 js 文件。
我必须手动删除 web/assets 文件夹。当你开发应用程序时,这真的很烦人。
当我将模块添加到后端文件夹时,这有效,但当我使用自己的命名空间在供应商文件夹中创建模块时,这不起作用。
解决方案
相对于 Yii1.x 而言 assetManager
您可以通过在配置文件中将“forceCopy”属性设置为 true 来做到这一点
...复制资产文件和目录,即使它们以前已经发布。该属性仅在开发阶段使用
请参阅强制复制文档 这里 了解更多信息。
或者你可以使用 linkAssets
这不会复制文件,而是在您的资产文件和资产目录之间创建软链接。您当然不能同时使用两者。
对于问题的第二部分,我假设这是在 Yii 2.x 中,你应该使用 AssetBundles,你可以从任何地方注册任何命名空间包,你只需在视图中注册它,就像这样
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
其他提示
在yii2中,您可以将时间戳附加到这样的资产的URL ...
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];
.
这不会强制资产在每个请求上重新加载,但只要资产文件更改,URL会因为时间戳而改变,这将强制资产被重新发布。
您可以设置 forceCopy = true
.
class Assets extends AssetBundle{
public function init()
{
parent::init();
$this->publishOptions['forceCopy'] = true;
}
}
不隶属于 StackOverflow