为什么我们必须在rails中的application.js中要求JS文件?

时间:2017-05-25 09:29:33

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

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

例如:

//= require abc
//= require xyz

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

1 个答案:

答案 0 :(得分:4)

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

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

&#34; // = require_tree。&#34;它以未指定的顺序或随机顺序加载,压缩和组合所有JS文件。现在,如果您是一名Web开发人员或现在已经开始,您可能知道或将会知道您必须多次按特定顺序加载JS文件,否则在我们实施它们时可能会出现一些冲突,它们可能无法正常工作正如我们所希望的那样。

其中一个着名的组合是jquery和bootstrap。为了使用bootstrap JS部分它需要jQuery,所以你必须首先初始化jquery然后再引导。正是因为这个原因,在rails中你需要application.js中的文件,指定你希望sprockets加载,压缩和组合成一个主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资产管道的信息。