【发布时间】:2016-06-24 23:52:26
【问题描述】:
由于项目要求,我必须使用与 Yii2 附带的不同版本的 jQuery。我知道我可以使用以下方法禁用它:
'assetManager' => [
'bundles' => [
// you can override AssetBundle configs here
'yii\web\JqueryAsset' => [
'sourcePath' => null,
'js' => []
],
],
],
然后我去 AppAsset:
class AppAsset extends AssetBundle
{
public $sourcePath = "@app/themes/v1/assets";
public $jsOptions = [ 'position' => \yii\web\View::POS_END ];
public $js = [
"js/lib/jquery/jquery-1.9.1.js",
];
}
但这带来了一个大问题,jquery在yii.validation之后加载等等:
</script><script src="/assets/5b466ff1/yii.js?v=1465857632"></script>
<script src="/assets/5b466ff1/yii.validation.js?v=1465857632"></script>
<script src="/assets/5b466ff1/yii.activeForm.js?v=1465857632"></script>
<script src="/assets/98d185b3/js/lib/jquery/jquery-1.9.1.js?v=1466702133"></script>
我的临时解决方案是将 POS_END 更改为 POS_HEAD,但这会影响页面 SEO,对吗?据我所知,在头部加载 js 被认为是不好的做法。
所以我的问题是:
如何从我的主题资源中加载 jQuery,使用 POS_END 并在 yii.validation 之前加载等?
一种可能性是将它添加到 web/js/jquery.js 中,但我更愿意将它保留在资产包中。
有什么想法吗?
更新:
将此添加到 AppAsset 允许我控制主题本身。它比修改全局配置更干净。
public function init()
{
parent::init();
Yii::$app->assetManager->bundles['yii\\web\\JqueryAsset'] = [
'js' => ['lib/jquery/jquery-1.9.1.js'],
'sourcePath' => '@app/themes/v1/assets/js'
];
}
【问题讨论】: