Yii2:注册资源包与注册外部 Js 文件


Yii2: Registering Asset Bundle vs registering external Js file

嗨,我想知道按照文档中描述的过程注册资源包的优势,例如流程一在应用资产中.php

public $js = [
        'js/myjsfile.js'
    ];

然后在视图文件中添加命名空间,例如

namespace app'assets;

然后添加 use 语句,例如

use app'assets'AppAsset;
AppAsset::register($this);

而不是做这一切,如果我使用流程二

$this->registerJs('js/myjsfile.js', $this::POS_READY);

它工作正常。那么我为什么要使用流程一

  1. 任何优势和原因将不胜感激。
  2. 如果我按照流程一 我需要添加所有 js 文件 应用资产.php单独。

谢谢。

资源包比普通注册具有一些优势。除了@deacs在他/她的回答中所说的之外,还有其他的:

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

所有使捆绑包大放异彩的功能都可以在文档中找到

使用资源包的主要原因之一是资产的路径始终正确。考虑:

$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);

将生成类似以下内容的内容:

<script src="js/myjsfile.js"></script>

这适用于未启用 urlManager 的网址,例如 http://localhost/yiiproject/index.php?r=user/update&id=8是因为您的浏览器在以下位置查找 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]);

但是资源包基本上可以为您做到这一点。

使用资源包,您还可以从"供应商"文件夹中获取最新版本,因此如果您需要更新某些库,则无需手动执行此操作,因为作曲家已经这样做了。