繁体   English   中英

Yii2资产-子资源完整性

[英]Yii2 Assets - Sub-Resource Integrity

我正在研究我的所有Yii2资产捆绑,以合并子资源完整性。 所以现在我有...

namespace some\amazing\space;

class AmazingAsset extends AssetBundle
{
    public $sourcePath = 'path/to/asset/files'; // or
    public $baseUrl = '//url/to/asset/files';
    public $js = [
        'js/amazingscript.min.js',
    ];
    public $jsOptions = [
        'integrity' => 'hash-of-js/amazingscript.min.js';
        'crossorigin' => 'anonymous',
    ];
    public $depends = [
        'some\useful\ThingAsset',
    ];
}

现在我想在包装中添加一些更神奇的调味料并得到...

namespace some\amazing\space;

class MoreAmazingAsset extends AssetBundle
{
    public $sourcePath = 'path/to/asset/files'; // or
    public $baseUrl = '//url/to/asset/files';
    public $js = [
        'js/amazingscript.min.js',
        'js/moreamazingscript.min.js',
    ];
    public $jsOptions = [
        'integrity' => 'hash-of-js/amazingscript.min.js';
        'crossorigin' => 'anonymous',
    ];
    public $depends = [
        'some\useful\ThingAsset',
    ];
}

但是在这里我陷入困境,因为jsOptions将同时应用于两个.js文件。 我看到的唯一方法是将其分成2个捆,其中一个捆需要另一捆...

namespace some\amazing\space;

class MoreAmazingAsset extends AssetBundle
{
    public $sourcePath = 'path/to/asset/files'; // or
    public $baseUrl = '//url/to/asset/files';
    public $js = [
        'js/moreamazingscript.min.js',
    ];
    public $jsOptions = [
        'integrity' => 'hash-of-js/moreamazingscript.min.js';
        'crossorigin' => 'anonymous',
    ];
    public $depends = [
        'some\amazing\space\AmazingAsset',
    ];
}

& 然后...

namespace some\amazing\space;

class AmazingAsset extends AssetBundle
{
    public $sourcePath = 'path/to/asset/files'; // or
    public $baseUrl = '//url/to/asset/files';
    public $js = [
        'js/amazingscript.min.js',
    ];
    public $jsOptions = [
        'integrity' => 'hash-of-js/amazingscript.min.js';
        'crossorigin' => 'anonymous',
    ];
    public $depends = [
        'some\useful\ThingAsset',
    ];
}

有其他选择吗?

据我了解,您希望能够分别为2个js文件的integrity属性指定哈希,并且当前通过使用$jsOptions为所有脚本文件提供相同的哈希。

如果以上正确,则可以通过将源指定为如下数组来从$js指定属性。 而不是为它们两个都创建2个单独的AssetBundles

public $js = [
        ['js/some.js','integrity'=>'SOME_SHA_HASH' ],
        ['js/another.js','integrity'=>'ANOTHER_SHA_HASH' ],
    ];

只要记住

“哈希算法必须是sha256sha384sha512 ,后跟'-'字符。”

您的代码如下所示

namespace some\amazing\space;

class CombinedAmazingAsset extends AssetBundle
{
    public $sourcePath = 'path/to/asset/files'; // or
    public $baseUrl = '//url/to/asset/files';
    public $js = [
        ['js/amazingscript.min.js','integrity' => 'hash-of-js/amazingscript.min.js'],
        ['js/moreamazingscript.min.js','integrity' => 'hash-of-js/moreamazingscript.min.js'],
    ];
    public $jsOptions = [
        'crossorigin' => 'anonymous',
    ];
    public $depends = [
        'some\useful\ThingAsset',
    ];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM