【问题标题】:Why do we have to require the JS files inside application.js in rails?为什么我们必须在 rails 的 application.js 中引入 JS 文件?
【发布时间】:2017-05-25 09:29:32
【问题描述】:

我是 Rails 新手,所以请原谅这个问题。现在,为什么我们必须 require application.js 文件中的 JS 文件或 application.css 文件中的 css 文件?据我所知,当我们启动服务器时,rails 会将目录中的所有 javascript 和 css 文件加载到一个文件中,所以如果它已经从目录中加载了所有文件,为什么需要在 application.js 中写入还是 application.css 文件?

例如:

//= require abc
//= require xyz

如果我已经有 abc.js 和 xyz.js 文件,为什么还要在 application.js 文件中要求它们?

【问题讨论】:

标签: javascript css ruby-on-rails ruby-on-rails-5


【解决方案1】:

你误解了这个概念。让我解释一下这个过程。如您所知,当您启动服务器时,rails 首先在 sprockets-rails gem 的帮助下预编译 assets 文件夹中的文件,但它是通过遵循 ma​​nifest 文件中指定的指令来完成的,即 application.js 和 application.css

现在在 application.js 中你有 "//= require_tree .",这告诉 sprockets 加载 javascript 目录中的所有文件,处理它们,压缩并组合它们以生成一个主文件Javascript 文件,这有助于减少网站的页面加载时间。现在,这是你的问题,因为 "//= require_tree ." 指令已经获取了 javascript 目录中存在的所有 javascript 文件,为什么需要在 application.js 中指定 javascript 文件? 答案是“订单”

"//= 要求树。"它以未指定的顺序或随机顺序加载、压缩和组合所有 JS 文件。现在,如果你是一个 web 开发者或者现在已经开始,你可能知道或者将会知道很多时候你必须以特定的顺序加载 JS 文件,否则在我们实现它们时可能会出现一些冲突,它们可能无法工作我们希望他们这样做。

其中一个著名的组合是 jquery 和 bootstrap。为了使用 bootstrap JS 部分,它需要 jQuery,因此您必须先初始化 jquery,然后再进行 bootstrap。正是由于这个原因,在 Rails 中,您需要 application.js 中的文件指定您希望链轮加载、压缩和组合成一个主 JS 文件的顺序。由于 sprockets 按照 application.js 文件中指定的顺序从上到下处理指令,因此需要 application.js 文件中的文件变得很重要。如果您有 2 个彼此不冲突的 javascript 或 css 文件,那么您无需要求 application.js 或 application.css 文件中的文件,它们仍然可以正常工作。

例如:

//= require jquery
//= require jquery_ujs
//= require bootstrap.min
//= require_tree .

在上面,sprockets-rails gem 将首先加载 jquery.js 文件,然后是 jquery_ujs.js 文件,然后是 bootstrap.min.js 文件。无需添加扩展名,因为它假定所有文件都仅为 javascript 类型。

以上全部解释也适用于application.css中指定的css文件的预编译。

如需更多信息,我建议您访问http://guides.rubyonrails.org/asset_pipeline.html 并阅读有关 Rails 资产管道的信息。

【讨论】:

  • 谢谢你。只是相比于传统的 HTML 和 JS 编码,rails 隐藏了很多东西。我不知道我们在普通 HTML 中订购 jquery 和 bootstrap 的方式,而 JS 是在 Rails 中以这种方式实现的。
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2019-04-17
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多