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呢

  1. 任何优势和原因将不胜感激。
  2. 如果我遵循该过程,我是否需要单独添加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在他/她的答案中所说的还有其他人:

  1. 如果资产不在Web可访问目录中,则资产包可以将文件发布到资产
  2. Assets Bundle可以处理较少的文件(如果是CSS)以及压缩资产。
  3. 使代码更优雅,特别是在解决依赖性和可重用性方面

所有使捆绑闪耀的function都可以在docs中找到

使用Asset Bundles,您还可以从’vendor’文件夹中获取最新版本,因此如果您需要更新某些lib,则无需手动执行此操作,因为composer已经执行此操作。