Rails Best Practice: добавить Javascripts вручную или использовать gem?

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

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

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

Ответ 1

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

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

Я также недавно начал использовать bower для некоторых источников JS, и есть дополнительный bower-rails gem, который предоставляет некоторые функции, связанные с пакетом. Довольно сладкий на самом деле!

Ответ 2

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

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

Ответ 3

Я использую драгоценный камень только по одной причине:

Предотвратить создание хранилища из ненужных писем

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

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

Ответ 4

Вот пример списка плюсов и минусов.

Использование Gems для ваших Javascript-библиотек:

Плюсы:

  • Он сохраняет ваши JS-зависимости в вашем Gemfile с другими зависимостями проекта.
  • Использование Gemfile позволяет группировать Javascript-библиотеки в определенные среды.
  • Немного быстрее и чище добавить Gem к вашему проекту. Для сравнения:

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

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

    Добавление библиотеки JavaScript вручную:

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

Минусы:

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

Мое мнение - использование обоих.

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

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

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

Ответ 5

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

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

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

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