Лучшая практика Rails: добавить Javascripts вручную или использовать gem? [закрытый]

Я довольно новичок в Rails, и я не уверен, что это лучшая практика, когда дело доходит до добавления активов.

может ли кто-нибудь сказать мне преимущества и недостатки наличия Javascripts в активах против использования соответствующего драгоценного камня?

Я нахожу драгоценные камни для почти всех библиотек javascript, которые я хочу использовать. Например, IntroJS. Должен ли я пойти с драгоценным камнем или загрузить javascript и иметь библиотеку в моих активах?

5 ответов


Если gem не предоставляет никаких помощников или генераторов, то это, как правило, просто удобство, которое позволяет легко обновлять версию активов через Gemfile. Это приятно, пока сам камень относительно близок по версии к фактическому источнику.

Я обычно начинаю с драгоценного камня, убедитесь, что он регулярно обновляется, а затем перейти к источнику, если мне действительно нужно.

Я также недавно начал использовать беседке для некоторых JS источники, и есть дополнительный Бауэр-рельсы gem, который предоставляет некоторые bundler как возможности. Довольно мило на самом деле!


Я предпочел использовать прямые источники javascript vs gem, потому что:

  • делает логику интерфейса независимой от рельсов. Используется аналогично 99% других проектов, использующих библиотеку js.
  • обновления версии. вероятно, что ваш драгоценный камень будет обновлен, чтобы указать на последнюю версию js позже. Делает немногую меньше гибкости над выбирать версии.
  • и основной причиной является ручной модификации : даже в некоторых хороших библиотеках js/jquery я много раз сталкивался с проблемой/ошибкой, которая не решена, и ее легче исправить, быстро отредактировав некоторые строки в источнике, или какое-то исправление существует, как опубликовано некоторыми пользователями, которые еще не сделали стабильный выпуск и т. д. Использование gem потребует от вас переопределить его (не так просто, как переопределение модуля ruby :) ) или fork gem, который не предоставляет будущего значения.

Я использую gem только по одной причине:

предотвратить репозиторий от ненужных junks

вам нужно обновить JavaScript libs, что будет происходить часто. Если вы потянете JS libs непосредственно в свое приложение, ваша база кода будет загрязнена ненужной информацией при фиксации.

использовать драгоценные камни. Если его не существует, создайте его, это очень просто. Если текущий драгоценный камень не обновляется, отправьте запрос на вытягивание или используйте вилку.


вот попытка списка " за " и "против".

использование драгоценных камней для ваших библиотек Javascript:

плюсы:

  • он сохраняет ваши зависимости JS в вашем Gemfile с другими зависимостями проекта.
  • использование Gemfile позволяет группировать библиотеки Javascript в определенные среды.
  • немного быстрее и чище, чтобы добавить драгоценный камень в свой проект. Сравнить:

    добавить библиотеку JS с помощью Джем:

    • укажите Gem в Gemfile
    • $ bundle install
    • require на application.js

    добавление библиотеки Javascript вручную:

    • загрузите библиотеку Javascript из исходного кода.
    • копировать в папку активов.
    • (необязательный) удалить старый актив.
    • require in application.js.

плюсы:

  • ваш проект теперь имеет дополнительное место для зависимостей:Gemfile и .
  • не каждая библиотека Javascript имеет драгоценный камень.
  • создание драгоценного камня для каждой библиотеки JS, у которой нет драгоценного камня, занимает много времени.
    • если вы нажмете ваш самоцвет к rubygems.org теперь вы отвечаете за поддержание Gem в актуальном состоянии с изменениями версии в библиотека.
    • если вы держите свой скомпилированный драгоценный камень локальным, куда вы его помещаете? Также обновление до последней версии библиотеки JS требует, чтобы вы переупаковали драгоценный камень, который утомителен.

мое мнение, использовать оба.

для библиотек Javascript, которые имеют хорошо поддерживаемый современный драгоценный камень, связанный с ним, используйте драгоценный камень. Для библиотек Javascript, у которых нет драгоценного камня, скопируйте lib в активы, но сохраните его целиком. Настройка библиотеки поместив переопределения в отдельный файл.

это должно сделать обновление библиотеки максимально безболезненным.

кроме того, в приложении.js, поставьте комментарий, в котором говорится, где вы включаете библиотеку (драгоценный камень или актив) для ясности.


  1. когда вы используете конвейер активов, браузер вашего пользователя делает только один запрос на получение javascript

  2. когда вы добавляете jquery вручную, давая ссылку на CDN, это хороший шанс, что пользователь уже скачал jquery и не нужно загружать его снова

Я также новичок в rails и хотел бы узнать больше =)

обновление В моих проектах много js, поэтому я иду с драгоценным камнем и одним запрос для всех js. Его также проще (для меня) обновить кучу Gemfile вместо погружения в источники каждого проекта