Yii2:注册Asset Bundle与注册外部Js文件
嗨,我想知道按照AppAsset.php中的Process one等文档中描述的流程注册Asset Bundle的优势
public $js = [ 'js/myjsfile.js' ];
然后在视图文件中添加Namespace
namespace app\assets;
然后添加如下的use语句
use app\assets\AppAsset; AppAsset::register($this);
如果我使用Process Two,而不是完成所有这些
$this->registerJs('js/myjsfile.js', $this::POS_READY);
它工作正常。 那我为什么要使用Process One呢 ?
- 任何优势和原因将不胜感激。
- 如果我遵循该过程,我是否需要单独添加AppAsset.php中的所有js文件。
谢谢。
使用资产包的主要原因之一是您的资产路径始终是正确的。 考虑:
$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);
会产生类似的东西:
这适用于非urlManager启用的URL,例如http://localhost/yiiproject/index.php?r=user/update&id=8
因为您的浏览器在以下/yiiproject/js/myjsfile.js
查找js文件: /yiiproject/js/myjsfile.js
但是如果你启用了urlManager,你的url将看起来像http://localhost/yiiproject/user/update/8
,这意味着你的浏览器将在以下位置查找你的js文件: /yiiproject/user/update/8/js/myjsfile.js
。
您可以使用以下方法克服此问题:
$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]);
但Asset Bundle基本上可以帮到你。
Asset Bundles比正常注册有一些优势。 除了@deacs在他/她的答案中所说的还有其他人:
- 如果资产不在Web可访问目录中,则资产包可以将文件发布到资产
- Assets Bundle可以处理较少的文件(如果是CSS)以及压缩资产。
- 使代码更优雅,特别是在解决依赖性和可重用性方面
所有使捆绑闪耀的function都可以在docs中找到
使用Asset Bundles,您还可以从’vendor’文件夹中获取最新版本,因此如果您需要更新某些lib,则无需手动执行此操作,因为composer已经执行此操作。