每次我需要在我的Rails 6应用程序(webpacker)上安装一个gem时,我都找不到像以前的Rails版本那样从gem中要求JS的位置。
以前的情况是这样的appassetsjavascriptsapplication.js。
//= require gem_name
但现在,作为 appassetsjavascripts 消失在资产中
我想我必须要求它从appjavascriptpacksapplication.js。 像这样
require("gem_name").start
但当我这样做的时候,尽管我有我的 宝石档案 与
gem 'gem_name'
并捆绑安装
它引发了一个未捕获的JS错误。
Uncaught Error: Cannot find module 'gem_name'
我应该如何和在哪里要求宝石JS?我真的不清楚,谢谢你。
如果你想要一个黑客的答案,我们需要知道你正在尝试安装哪个 gem。
然而,特别是如果这是一个新的Rails-6项目,你最好花一些时间学习Rails 6如何使用webpacker。一旦你掌握了这个窍门,你就可以访问任何js包。
我发现 https:/hackernoon.comintegratebootstrap-4-font-awesome-5-in-rails-6-u87u32zd。 是一个很好的开始。
但同样的,如果你告诉我们你要安装的是哪个JS包(或者它的哪个gem封装器),我们可以更具体的回答。
至于 webpacker
我们需要将js文件从gem中单独添加出来,这看起来像是一种倒退,因为在sprockets中我们已经从gem文件夹中添加了文件。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 gem,所以没有必要把这个添加到。gemfile
(rails ujs是额外的完全的js文件,以前是在jQuery里面的。gemfile
),其次,宝石可能内容为js、css和ruby,与 webpacker
我们主要是摆脱js宝石类型,并取决于你如何处理CSS,我们可能会摆脱CSS类型的宝石(如 bootstrap gem
是js和CSS gem)的反直觉,但我们可以用Yarn处理和安装包含js和CSS文件的模块\packges,以及 webpack
是可以很好的使用这两种方法。虽然按照惯例,它仍然建议使用链轮来处理CSS,所以我们只需在需要的时候将路由设置为node_modules.在最后的第三点,它的做法总是很好的,看看yarn的 yarnpkg.compackage 来查看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 没有模块/packege怎么办呢?这里只是有点复杂,取决于具体情况,有时你可以直接从 gem 中提取代码,然后在你的 javascript 文件夹中通过 import 添加,或者如果代码没有模块,你可以使用 exports-loader
包,将旧的js代码打包到模块中。