Yii2: Регистрация Asset Bundle и регистрация внешнего Js файла

Привет, я хотел узнать преимущество регистрации Asset Bundle в соответствии с процессом, описанным в документах типа Обработать один в AppAsset.php

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

то в файле вида добавление пространства имен, например

namespace app\assets;

а затем добавив оператор использования, например

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

Вместо этого, если я использую Процесс два

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

он отлично работает. Итак, почему я должен использовать Process One.

  • Вам будет полезно любое преимущество и причина для этого.
  • Если я следую процессу . Мне нужно добавить все js файлы в   AppAsset.php индивидуально.

Спасибо.

Ответ 1

Одна из основных причин использования Asset Bundle заключается в том, что пути ваших активов всегда будут правильными. Рассмотрим:

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

будет генерировать что-то вроде:

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

Что отлично подходит для URL-адресов, не поддерживаемых 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]);

Но Asset Bundle в основном делает это для вас.

Ответ 2

Связи Asset имеют некоторые преимущества перед нормальной регистрацией. Кроме того, что сказал @deacs в своем ответе, это другие:

  • Assets Bundles могут публиковать файл в активах, если его нет в веб-каталоге
  • Assets Bundle может обрабатывать меньше файлов (в случае CSS), а также сжимать активы.
  • Делает код элегантным, особенно в решении зависимостей и, следовательно, повторного использования.

Все функции, которые делают блестки пакетов, найдены в docs

Ответ 3

Используя Asset Bundles, вы также можете получить последнюю версию из папки "vendor", поэтому, если вам нужно обновить некоторую библиотеку, вам не нужно вручную это делать, поскольку композитор уже делает это.