[英]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' ],
];
只要记住
“哈希算法必须是
sha256
,sha384
或sha512
,后跟'-'字符。”
您的代码如下所示
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.