Rails 资产最佳实践 [关闭]

2024-03-26

我是 Rails 新手,无法找出组织资产的最佳方式。这个问题的目的是收集我的想法,征求意见,并随着时间的推移改进文档 - 也许有一天它可以成为 Rails 指南。 (Rails Wiki 似乎已经死了。)这将旨在帮助新手概念化,而不是参考,因此它将仅限于最常见的场景。


资产管道 - 概述

有关管道的目的、优点和内部工作原理的详细信息,请从本指南开始:http://guides.rubyonrails.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.html我只会在这里总结与我的目的相关的部分。

需要管道的原因是:

  1. 汇编:将高级语言(ERb、Haml、Sass、LESS、CoffeeScript...)编译为纯 CSS/JS。

该管道的额外好处是:

  1. 级联:将多个文件合并为一个以提高客户端性能。
  2. 缩小:删除空格和其他巧妙的优化以减少文件大小。
  3. 指纹识别:将文件内容的 MD5 哈希值添加到文件名中,以强制缓存在文件更改时再次获取文件。

资产管道 - 默认文件系统布局

  • app|lib|vender/assets/- 用于将由管道处理的文件。
  • app/assets/- 专门用于您为应用程序创建的文件。
  • lib/assets/- 专门用于您创建的用于在多个应用程序之间共享的文件。
  • vendor/assets/- 专门用于其他人创建的文件,例如 jQuery 和 Twitter Bootstrap(尽管它们经常由 gems 提供,而不是直接导入到 /vender 中)。
  • public/- 此处的文件保持原样,可直接从 Web 应用程序的根路径(“/”)获取。

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

应用程序/资产/javascripts/application.js

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

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

/*
 *= require_self
 *= require_tree .
 */

公共/404.html
公共/机器人.txt
...

Gemfile

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

以下是资产管道编译器使用新 Rails 应用程序的默认设置执行的操作:

  1. 编译器默认会处理application.js, application.css,以及所有非 JS/CSS 文件(主要是图像)。
  2. 这两个应用程序文件包含 sprocket 指令(以 = 开头的注释行)。 Sprockets 是为 Rails 资产管道编译提供支持的库。这些指令也称为体现,因为它们列出了要包含的文件。
  3. application.js包含一个清单,该清单提取两个 jquery 文件(存在于 jquery-rails gem 中,而不是您的应用程序中),然后提取app/assets/javascripts/树通过require_tree .。通过此清单包含的所有文件将被编译成一个名为application-[the MD5 hash].js,并置于public/assets/.
  4. application.css包含一个清单,该清单提取了中的所有文件app/assets/stylesheets/树通过require_tree .. The required_self指令告诉编译器将所有 CSS 内容包含在application.css文件本身,并按照指令的顺序。所以,在这种情况下,CSSapplication.css将出现在其余部分之上。通过此清单包含的所有文件将被编译成一个名为application-[the MD5 hash].css,并置于public/assets/.
  5. 应用程序/资产树中的所有非 JS/CSS 文件(主要是图像)也将被指纹识别并放置在public/assets/,目录结构完好无损。例如,app/assets/images/categories/computers.png最终将成为public/assets/categories/computers-[the MD5 hash].png.

概念化资产内依赖场景

Images

图像之间没有依赖性,它们总是独立的。

样式表

  • CSS:CSS 文件可以互相导入,只要路径正确就可以工作,尽管这可能不是最好的技术。
  • Sass:Sass 文件可以互相导入,也可以共享变量和 mixin,但是只有当他们还是Sass的时候(不是在编译成CSS之后),并且仅通过 Sass 导入。如果您有链轮指令application.css.scss这需要'a'和'b',它们将在合并之前在不同的上下文中编译。要共享变量和 mixins,您必须使用 Sass 导入指令从 'b' 导入 'a',反之亦然。 (参见下面的关键概念 1。)
  • LESS:【对这个还不够了解。】

JavaScript

  • JS:JavaScript 组件具有相互依赖性(例如:Twitter Bootstrap 使用 jQuery)。但是,它们都是在浏览器中运行时解析的,因此,只要浏览器最终加载所有内容,如何组织/组合项目中的文件并不重要。
  • 咖啡脚本:【对这个还不够了解。】

助手行为 - Rails 视图

TODO

助手行为 - Sass

TODO

最佳实践 - 关键概念

  1. 该管道用于准备生产资产。将其视为部署系统的一部分,而不是应用程序本身。自己建立应用程序的逻辑结构,然后配置链轮以在该结构上正确运行。

最佳实践 - 常见资产场景

TODO

最佳实践 - 一般有用的默认值总结

TODO

** 问题 **


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 资产最佳实践 [关闭] 的相关文章

随机推荐