在 Rails 6 webpacker 中哪里可以找到 Gems 需要的 JS

Where to find the JS to require from Gems in Rails 6 webpacker

每次我需要在我的 Rails 6 应用程序 (webpacker) 上安装 gem 时,我无法像以前那样从 gem 中找到需要 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'

我应该如何以及在哪里需要 gems JS?我真的不清楚 谢谢

如果您想要一个 hacky 答案,我们需要知道您要安装哪个 gem。

但是,特别是如果这是一个新的 rails-6 项目,您最好花一些时间学习 Rails6 如何使用 webpacker。一旦你掌握了它,你就可以访问任何 js 包。

我发现 https://hackernoon.com/integrate-bootstrap-4-and-font-awesome-5-in-rails-6-u87u32zd 是一个很好的起点。

但同样,如果您告诉我们您要安装哪个 JS 包(或它的哪个 gem 包装器),我们可以更具体地回答。

至于 webpacker 我们需要从 gem 中单独添加 js 文件,这看起来像是一种回归,因为对于链轮我们已经添加了 [=49= 中的文件] 文件夹。 Webpack 给我们带来了很多很棒的功能,也带来了一些令人头疼的问题。 而且由于 webpacker 是一个相对较新的框架,许多 gem 还没有切换到新格式。

如果 gem 添加了对 webpack 的支持 将他们的 js 打包到 es6 模块中(简单的方法) 我们只是用 Yarn 安装 js,并像你上面提到的那样要求它。

让我们看一个基于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 gem,因此无需将其添加到 gemfile(rails ujs是另外一个完整的js文件,之前在gemfile),其次,gems可以包含js,CSS,和ruby,我们用webpacker主要是摆脱 js gems 类型,并取决于你如何处理 CSS,我们可能会摆脱 CSS 类型 gems(比如 bootstrap gem那是 js 和 CSS gem) 违反直觉,但是我们可以使用包含 js 和 CSS 文件的 Yarn 来处理和安装 modules\packges,而 webpack 是两者都适用。 虽然按照惯例它仍然建议使用 CSS 的链轮,所以我们只是在需要时将路由设置为 node_modules。 在最后第三点,查看 yarn yarnpkg.com/package 以查看 gem 是否有我们可以添加的包始终是一个好习惯。

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' 

好的,但是如果 gem 没有 module\packege 怎么办? 这里只是有点复杂,视情况而定,有时您可以从 gem 中获取代码并通过导入将其添加到 javascript 文件夹中,或者如果代码没有模块,您可以使用 exports-loader package 将旧的js代码打包到模块中。