<rmcreative>

RSS

Yii 2.0: не скачиваем клиентские пакеты

6 апреля 2016

При разработке Yii 2.0 мы сделали ошибку, включив в ядро по умолчанию клиентские пакеты вроде jQuery. В большинстве случаев это не доставляет проблем, но вот когда разрабатывается исключительно API, а пакеты всё-равно скачиваются и занимают место, возникает некое чувство дискомфорта.

В 2.1 мы попробуем это решить, а пока можно воспользоваться средствами Composer прописав следующее в своём главном composer.json:

"provide": {
    "bower-asset/jquery": "*",
    "bower-asset/jquery.inputmask": "*",
    "bower-asset/punycode": "*",
    "bower-asset/yii2-pjax": "*"
},

UPD: есть и в готовом виде: https://github.com/cebe/assetfree-yii2

Комментарии RSS

  1. №10440
    rmrevin
    rmrevin 06 апр. 2016 г., 20:58:17

    Так провайд же всё равно выкачает пакеты? Нужно replace использовать, чтобы композер не скачивал эти пакеты. И самый раздражающий момент не в том, что скачиваются эти пакеты, а в том, что fxp каждый раз читает базу бавера для проверки обновлений. Из-за чего в самом простом случае обновление пакетов с 10-15 секунд возрастает до минуты. Пустая трата времени.

  2. №10441
    Sam
    Sam 07 апр. 2016 г., 0:33:27

    rmrevin, без него тоже можно. С конфигом выше сработает.

  3. №10442
    Василий
    Василий 07 апр. 2016 г., 14:14:32

    Composer для composer.json, Bower для bower.json, и т.д. Зачем еще один костыль?

  4. №10443
    Sam
    Sam 07 апр. 2016 г., 16:17:04

    Для зависимостей определённых версий PHP-библиотек на определённые версии JS-библиотек и автоматической установки расширений.

  5. №10444
    Василий
    Василий 07 апр. 2016 г., 16:54:44

    Дак так ведь и получается: каждый репозиторий с пакетом будет содержать composer.json и bower.json. Везде указаны зависимости и версии пакетов. Вот только каждый будет заниматься своим делом, и не лезть другому "в душу".

  6. №10445
    Sam
    Sam 07 апр. 2016 г., 18:16:38

    Василий, умгу, только руками придётся прописывать себе все клиентские зависимости расширений. Скорее всего, к этому и придём...

  7. №10448
    Павел
    Павел 09 апр. 2016 г., 11:19:04

    Может быть стоит подумать над каким-то расширением, которое позволило бы автоматически скачивать и устанавливать клиентские библиотеки из bower.json/packages.json через специальную консольную команду. Как например в ларавел есть спец.команда assets:publish или типа того.

    Понятно, что тут есть над чем поразмышлять, но просто сказать, что мол ребята, скопируйте зависимости руками - это не дело. Вообще, был ли анализ того, как решен вопрос в других фреймворках?

  8. №10449
    Sam
    Sam 09 апр. 2016 г., 21:53:19

    Павел, конечно был. Другие PHP-фреймворки, чаще всего, не решают проблему никак. Они просто не лезут в фронтенд.

  9. №10451
    Nepster
    Nepster 10 апр. 2016 г., 14:41:23

    Sam,

    Другие PHP-фреймворки, чаще всего, не решают проблему никак. Они просто не лезут в фронтенд.

    Исходя из всего того, на что я натыкался в Yii2, я думаю это правильно. Если что-то нужно, можно сделать в виде расширения.

    Кстате в Yii2.1 планируется выпилить весь фронт в отдельные пакеты ?

  10. №10453
    Sam
    Sam 11 апр. 2016 г., 0:10:56

    Nepster, да.

  11. №10454
    Alex
    Alex 11 апр. 2016 г., 7:54:29

    А насколько 2.1 будет совместим с 2.0, будет ли возможность обновления?

  12. №10455
    Porcelanosa
    Porcelanosa 11 апр. 2016 г., 8:50:33

    Да поддерживаю вопрос об обратной совместимости 2.1

  13. №10456
    mrsombre
    mrsombre 11 апр. 2016 г., 11:27:22

    Мы, например, все зависимости фронта решаем через npm, так что пришлось просто добавить bower-assets в исключения ide и смириться. Без этой шляпы было бы лучше. Если поставлять отдельно bower.json и package.json, а разрабы пускай используют что им нравится, не маленькие.

  14. №10457
    Sam
    Sam 11 апр. 2016 г., 11:27:40

    Обратной не будет, на то и major-релиз, но общего у него будет намного больше, чем у 1.1 и 2.0. Прямо переписывать всё-всё не придётся.

  15. №10458
    Павел
    Павел 11 апр. 2016 г., 12:51:51

    Самой большой болью на текущий момент является fxp/composer-asset-plugin.

    Он конечно свою задачу выполняет, но то, как он тормозит composer update при большом количестве пакетов - это надо видеть.

  16. №10465
    mrsombre
    mrsombre 12 апр. 2016 г., 14:13:16

    Смешивать ассеты и фреймворк - это имхо само по себе ошибка, от этого и боль. Да, хочется чтобы все работало вот прям из коробки. Но давайте не будем уже совсем считать разрабов без рук и мозгов. Напишите, что для работы компонента нужно прописать путь до ассета, пускай это будет в зависимости, пускай компонент кидает exception, если не задан ассет, но как и куда его положить - это дело разработчика. Можт у меня jquery с cdn, мож он на static сервере отдельном валяется, я его с npm/ bower, что там еще придумали тяну. Или вообще нафиг это API и нет там никаких ассетов. Как-то так вот хочется закричать, когда yii2.0 видишь. Извиняюсь за эмоции)

  17. №10466
    Sam
    Sam 14 апр. 2016 г., 12:34:41

    mrsombre, CDN, статика с отдельного сервера, npm и bower. А также сборка grunt-ом и gulp-ом — это всё делается и довольно легко. Но мысль выкинуть ассеты вообще и переложить всё это на разработчика, конечно, появлялась и продолжает.

  18. №10471
    gri
    gri 19 апр. 2016 г., 11:57:53

    Спасибо за заметку, Саша, мне это нужно бывает. Помню, 2ку планировали выпускать "голой", а остальное ставить пакетами. Что-то не пошло?

  19. №10472
    Sam
    Sam 19 апр. 2016 г., 22:55:38

    gri, пошло, но не полностью.

  20. №10474
    samizdam
    samizdam 23 апр. 2016 г., 1:11:17

    А насколько 2.1 будет совместим с 2.0, будет ли возможность обновления? Да поддерживаю вопрос об обратной совместимости 2.1 Обратной не будет, на то и major-релиз, но общего у него будет намного больше, чем у 1.1 и 2.0. Прямо переписывать всё-всё не придётся.

    Тут некоторая неточность, как мне кажется.

    2.0 -> 2.1 это минорный релиз. 1.1 -> 2.0 — мажорный.

    Минорный релиз подразумевает сохранение обратной совместимости, и только добавление новой функциональности.

    Мажорный релиз — отсутствие обратной совместимости. Есть ещё вариант объявления, в промежуточной минорной версии, чего либо deprecated, с выбросом ошибок / логированием соответствующим, и уже удалением в последующих минорных обновлениях. ЕМНП, по semver. Т.о.:

    1. например в 2.0 нашли фичу, от которой стоит отказаться
    2. в 2.1 отметили её как deprecated, т.е. подлежащей удалению в будущем
    3. в 2.2 выпили без сожаления
  21. №10497
    Евгений Куликов
    Евгений Куликов 07 мая 2016 г., 11:28:55

    Sam, а не планируется ли взаимодействие с Gulp или другими сборщиками? Возможно есть уже наработки или это оставляете на плечи разработчиков проектов (просто интересно)

  22. №10498
    Sam
    Sam 10 мая 2016 г., 22:41:40

    Евгений Куликов, оставляем на плечи.

  23. №10506
    Евгений Куликов
    Евгений Куликов 21 мая 2016 г., 5:59:05

    Sam, понял, благодарю.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.