为什么我们必须在应用程序内部.js rails 中要求 JS 文件?



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

例如:

//= require abc
//= require xyz

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

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

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

"//= require_tree ." 它以未指定的顺序或随机顺序加载、压缩和组合所有 JS 文件。现在,如果您是Web开发人员或现在已经开始,您可能知道或将知道很多时候您必须以某种特定顺序加载JS文件,否则当我们实现它们时可能会出现一些冲突,它们可能无法按我们想要的方式工作。

其中一个著名的组合是jquery和bootstrap。为了使用bootstrap JS部分,它需要jQuery,所以你必须首先初始化jquery,然后再引导。正是出于这个原因,在 rails 中您需要应用程序内部的文件.js指定您希望链轮加载、压缩和组合成一个主 JS 文件的顺序。当 sprockets 按照 application.js 文件中指定的顺序从上到下处理指令时,要求 application.js 文件中的文件变得很重要。如果您有 2 个 javascript 或 css 文件,它们彼此之间没有任何联系,那么您不需要应用程序.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 资产管道的信息。

最新更新