我的网站分为多个单独的模块。每个模块都有自己特定的 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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top