在Rails Asset Pipeline中组织JavaScript



广泛:在铁轨管道中组织JS的最佳实践是什么?

具体来说:我已经快速生长的JS文件,我可以将其包括在总体application.js清单中,并让链轮uglify。但是,每个单独的JS文件都开始变得笨拙,我很想组织它们,这样我就不必挖掘数百条实用功能来获取代码的肉。我认识到目标是某种命名/模块化,但我不知道将其与资产管道结合在一起的最佳实践,尤其是链轮的表现。

我已经考虑过的事情,并彻底阅读:

  • 是的,我已经阅读了其资产管道上的整个Rails指南。我知道requirerequire_tree等链轮指令如何工作;问题是我想使用相同的指令,例如ES6 import命令的等效指令,以便我可以做

    之类的事情
     // in, say, controller.js
     //= require 'utilities'
     ...
     more code
     ...
     // and in application.js, more confidently
     //= require 'controller'
    

    但我感觉到不应该使用表现方式,或者至少每次我更改utilities中的一行时,它都会不必要地重新编译资产层。我还考虑过从application.js单独需要每个文件,但这并没有真正提供似乎合适的模块化。

  • 宝石,例如paloma,commonjs或requirejs。这些看起来像是过度的,似乎是要替换管道而不是补充管道。

  • "现代" JS,例如ES6,Babel或浏览。(我承认我还不了解这些项目的重叠,但是我认为我有要点的要点。)也许最终,因为JS似乎朝着这个方向发展,但看起来像是过分的。
  • gulp。与以前相同的脉络,过度杀伤和资产管道的不必要重写。
  • Rails 5和链轮4.我们现在在Rails 4上发行。

那我该怎么办?我想我需要咬一颗子弹并与其中之一一起去,但是我无法弄清楚哪个是最有意义的。该项目并不特别依赖JS,但是我现在想组织它,而不是以后进行。

我发现,当我有大量的页面特异性JS时,最好仅将资产管道留给仅重复一次的JS。显然,所有外部图书馆都应继续进入您的供应商/JS文件夹。在您的应用中添加特定于页面的JS的最大轨道风格的方法(因此,仅在一个页面中需要库或脚本时避免在每个页面中加载JS)是将其添加到布局/application.html的底部。关闭车身标签之前的ERB文件:

<%= yield :javascript %>

然后,考虑到您要运行一些JavaScript片段的视图,您应该将其放在所有HTML标签都关闭后,将其放在其底部。确保它不在该视图中的某些div或其他任何地方,而是在其底部。

<%= content_for :javascript do %>
  <script type="text/javascript">
   $(document).on('page:load', function() {
       all your page specific code here..
     });
  </script>
<% end %>

现在,此代码将仅在您需要的特定视图上加载到布局视图的底部,而不是与您的资产/JS文件夹中的所有其他资产一起串联。我使用并非应用程序的所有自定义JS进行此操作,并且非常容易维护/调试。

最新更新