Rails的资产最佳实践[关闭](Rails Assets Best Practices [clos

2019-07-30 10:15发布

我是新来的Rails,以及遇到问题搞清楚组织我的资产的最佳途径。 这个问题的目的是为了收集我的想法,征求意见,并随着时间的推移演变的文件 - 或许它可以是一个Rails指南一天。 (Rails的维基似乎是死的。)这将表示为帮助概念化为新手,而不是一个参考,所以它会被限制在最常见的情况。


资产管道-概述

有关目的,效益和管道的内部运作细节,开始与本指南: http://guides.rubyonrails.org/asset_pipeline.html我只总结有关在这里我的目的位。

原因在管道是必要的:

  1. 编译:编译高级语言(ERB,Haml的,无礼的话,LESS,CoffeeScript的...)为纯CSS / JS。

该管线的额外的好处是:

  1. 级联:多个文件合并成一个,以提高客户端性能。
  2. 缩小:删除空格和其他聪明的优化,以减少文件大小。
  3. 指纹:添加的文件内容的MD5哈希的文件名来强制缓存再次**获取该文件时它改变。

资产管道-缺省文件系统布局

  • app|lib|vender/assets/ -面向将由管道处理的文件。
  • app/assets/ -专为您的应用程序创建的文件之意。
  • lib/assets/ -专门为您在多个应用程序共享创建的文件之意。
  • vendor/assets/ - (虽然他们经常由宝石提供,而不是被直接导入到/厂商),用于通过其它诸如jQuery和Twitter的引导创建的文件具体预期。
  • public/ -文件中,这里是来自你的web应用程序的根路径(“/”)保留原样,并且可提取直接。

资产管道-默认的文件和行为

应用程序/资产/ JavaScript的/ application.js中

//= require jquery
//= require jquery_ujs
//= require_tree .

应用程序/资产/样式表/ application.css

/*
 *= require_self
 *= require_tree .
 */

公共/ 404.html
公共/的robots.txt
...

的Gemfile

...
gem 'jquery-rails'
...

这里的资产管道编译器使用新的Rails应用程序的默认设置是什么:

  1. 编译器,默认情况下,将处理application.jsapplication.css ,和所有非JS / CSS文件(图片,大部分)。
  2. 这两个应用程序文件包含链轮指令(与=启动注释行)。 链轮是库权力滑轨资产管道汇编。 这些指令也被称为体现 ,因为他们列出文件列入。
  3. application.js包含了两个jQuery的文件(存在于jQuery的轨道宝石,而不是在你的应用程序)拉一个清单,然后在所有文件翻出app/assets/javascripts/通过树require_tree . 。 包括所有文件通过这个清单将被编译成称为单文件application-[the MD5 hash].js ,并放置在public/assets/
  4. application.css包含拉在所有文件的清单app/assets/stylesheets/通过树require_tree . 。 该required_self指令告诉编译器包含在任何CSS内容application.css文件本身,并在指令的顺序。 所以,在这种情况下,在CSS application.css就会出现上面休息。 包括所有文件通过这个清单将被编译成称为单文件application-[the MD5 hash].css ,并放置在public/assets/
  5. 在app /资产树中的所有非JS / CSS文件(图片,大部分)也将获得按指纹,并放置在public/assets/ ,目录结构不变。 例如, app/assets/images/categories/computers.png最终将作为public/assets/categories/computers-[the MD5 hash].png

概念化内部资产相关方案

图片

图片有他们之间没有依赖关系,他们总是独自站立。

样式表

  • CSS:CSS文件可以导入对方,只要路径是正确的,这将工作,虽然它可能不是最好的方法。
  • 萨斯:萨斯文件可以导入对方,以及共享变量和混入,但只有当他们仍然萨斯 (不编译到CSS后),而且只能通过进口萨斯 。 如果您在链轮指令application.css.scss需要“a”和“B”,他们将在独立的环境中合并之前编译。 要共享变量,混入,你必须导入“A”从“B”或反之亦然使用萨斯导入指令。 (参见下面的关键概念1)。
  • LESS:不知道有足够的了解这一点。]

JavaScript的

  • JS:JavaScript组件具有相互依赖性(例如:Twitter的引导用了jQuery)。 然而,他们都在浏览器中运行时得到议决,所以不要紧,你如何组织/在你的项目合并文件,只要所有内容最终将被加载到浏览器。
  • CoffeeScript的:不知道有足够的了解这一点。]

辅助行为- Rails的意见

ALL

辅助行为-萨斯

ALL

最佳做法-关键概念

  1. 这条管道是制备资产进行生产。 你可以把它作为部署系统,而不是应用程序本身的一部分。 建立你自己的应用程序的逻辑结构,然后配置到链轮上的结构正常运行。

最佳实践-通用资产方案

ALL

最佳实践-一般使用默认值的汇总

ALL

** **的问题

文章来源: Rails Assets Best Practices [closed]