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", поэтому, если вам нужно обновить некоторую библиотеку, вам не нужно вручную это делать, поскольку композитор уже делает это.