Где найти JS, который требуется от Gems in Rails 6 webpacker - PullRequest
0 голосов
/ 17 июня 2020

Каждый раз, когда мне нужно установить гем в моем приложении Rails 6 (веб-пакере), я не могу найти, где потребовать JS от гема, как я делал в предыдущих версиях Rails.

Так было раньше app / assets / javascripts / application. js

//= require gem_name

Но теперь, поскольку app / assets / javascripts имеет исчезают из ресурсов

Я думал, что мне нужно потребовать это из app / javascript / packs / application. js вот так

require("gem_name").start

Но как я это делаю , хотя у меня есть мой Gemfile с

gem 'gem_name'

и его установил пакет

, он вызывает неперехваченную JS ошибку:

Uncaught Error: Cannot find module 'gem_name'

Как и где мне требовать драгоценные камни JS? Мне правда непонятно Спасибо

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Что касается webpacker, нам нужно добавить файлы js отдельно от гема, это может показаться своего рода регрессом, поскольку со звездочками мы добавили файлы из папки гема. Webpack приносит нам много замечательных функций, а также некоторые головные боли. А поскольку webpacker является относительно новым фреймворком, многие гемы не перешли на новый формат.

Если в гем добавлена ​​поддержка webpack, упаковал свои js внутри модулей es6 (легко способ) мы просто устанавливаем js с Yarn и требуем его, как вы упомянули выше.

Давайте посмотрим на пример, основанный на i18n- js gem. в предыдущей версии (звездочки) нам нужно было:

1 # add gem to the gemfile
=> gem "i18n-js"
2 # run gem install
=> gem install "i18n-js"
3 # require gem js inside aplication.js
=> //= require i18n.js

С webpacker тот же процесс будет выглядеть так:

1 # install the js with Yarn # 
=> yarn add i18n-js

Три комментария по этому поводу, во-первых, как вы может увидеть, что i18n-js полностью js гем, поэтому нет необходимости добавлять его в gemfile (rails u js - это дополнительные полностью js файлы, которые ранее находились внутри gemfile), во-вторых, драгоценные камни может содержать js, CSS и ruby, с webpacker мы в основном избавляемся от js драгоценных камней, и в зависимости от того, как вы обрабатываете CSS, мы можем избавиться от CSS типов драгоценные камни (например, bootstrap gem, то есть js и CSS драгоценный камень) нелогично, но мы можем обрабатывать и устанавливать модули \ пакеты с помощью Yarn, которые включают файлы js и CSS, а webpack работает хорошо с обоими. Хотя по соглашению все еще предлагалось использовать звездочки для CSS, поэтому мы просто устанавливаем маршруты для node_modules, когда это необходимо. В последнем третьем пункте всегда полезно посмотреть на пряжу yarnpkg.com / package , чтобы увидеть, есть ли у драгоценного камня пакет, который мы можем добавить.

2 # added installed package to the pack\page you need the package
  import I18n from "i18n-js"
3 # now you can set the language for the package
  I18n.defaultLocal = 'he' 

Хорошо, но что делать, если у гема нет модуля \ packege? здесь это немного сложно, зависит от случая, иногда вы можете просто взять код из драгоценного камня и добавить его через импорт в свою папку javascript, или, если в коде нет модуля, вы можете использовать пакет exports-loader для упаковки старого js код для модулей.

1 голос
/ 17 июня 2020

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

Однако, особенно если это новый проект rails-6, вам лучше потратить немного время узнать, как Rails 6 использует webpacker. Как только вы освоитесь с этим, вы получите доступ к любому пакету js.

Я обнаружил, что https://hackernoon.com/integrate-bootstrap-4-and-font-awesome-5-in-rails-6-u87u32zd - отличное место для начала.

Но опять же, если вы сообщите нам, какой пакет JS (или какую оболочку gem) вы пытаетесь установить, мы можем ответить более конкретно.

...