【发布时间】:2016-06-15 14:44:53
【问题描述】:
概括地说:在 Rails 管道中组织 JS 的最佳实践是什么?
特别是:我有快速增长的 JS 文件,我可以将它们包含在总体 application.js 清单中并让 Sprockets 丑化。但是,每个单独的 JS 文件都开始变得笨拙,我很想对它们进行组织,这样我就不必挖掘数百行实用函数来了解代码的实质。我认识到目标是某种命名空间/模块化,但我不知道将其与资产管道相结合的最佳实践是什么,尤其是 Sprockets 清单。
我已经考虑过并仔细阅读的内容:
-
是的,我已阅读有关其资产管道的完整 Rails 指南。我知道像
require和require_tree这样的Sprockets 指令是如何工作的;问题是我想使用类似 ES6import命令的相同指令,所以我可以做类似的事情// in, say, controller.js //= require 'utilities' ... more code ... // and in application.js, more confidently //= require 'controller'但我觉得不应该如何使用清单,或者至少每次我在
utilities中更改一行时它都会不必要地重新编译资产层。我还考虑过单独要求来自application.js的每个文件,但这并没有真正提供看起来合适的模块化。 像 Paloma、CommonJS 或 RequireJS 这样的 Gem。这些看起来有点矫枉过正,似乎是为了取代管道而不是补充管道。
- “现代”JS,如 ES6、Babel 或 Browserify。 (我承认我还没有真正理解这些项目中的重叠,但我想我明白了它们的目的。)也许最终,因为 JS 似乎正朝着那个方向发展,但也似乎有点矫枉过正。
- 吞咽。与以前一样,过度杀伤和不必要的资产管道重写。
- Rails 5 和 Sprockets 4。我们现在在 Rails 4 上,我知道 Sprockets 4 内置了一些 ES6,但我不打算在 Rails 5 公开后至少一段时间后升级发布。
那我该怎么办?我想我需要硬着头皮选择其中一个,但我就是不知道哪个最有意义。该项目不是特别依赖 JS,但它已经足够了,我想现在而不是以后来组织它。
【问题讨论】:
-
我刚才回答了这个关于谷歌地图的问题,它详细说明了如何在 Rails 应用程序中分解页面特定的 js——可能会有所帮助:stackoverflow.com/questions/36811056/…
-
我或多或少已经知道如何做到这一点(实际上,我正在做类似的事情。)问题是当
my_map_handler.js的模拟是我写的东西时,我写的东西很大,我该文件需要子模块。基本上,我知道如何在视图中组织我的 JS,这样它们就不会被多余地使用(无论如何我都可以接受)——它更多的是关于我正在编写的 JS 文件中的代码卫生,以及在管道中的工作框架。 -
酷。我只是想我会把它放在页面特异性方面,而不是你剩下的问题。
标签: javascript ruby-on-rails ruby-on-rails-4 asset-pipeline sprockets