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