在应用程序和源代码管理中存储 SASS 生成的 CSS 的最佳方法是什么?

StackOverflow https://stackoverflow.com/questions/86018

  •  01-07-2019
  •  | 
  •  

如果您在 Rails 应用程序中使用 HAML 和 SASS,那么您在 public/stylesheet/*.sass 中定义的任何模板都将被编译为 *.css 样式表。在代码中,您可以使用 stylesheet_link_tag 按名称拉入资源,而不必担心扩展名。

许多人不喜欢在版本控制中存储生成的代码或编译的代码,并且 public/ 目录不应该包含不发送到浏览器的元素也是理所当然的。

在 Rails 项目中布置 SASS 资源时应遵循的最佳模式是什么?

有帮助吗?

解决方案

我总是在“public/stylesheets/sass/*.sass”中对所有样式表进行版本控制,并为已编译的样式表设置排除过滤器:

/public/stylesheets/*.css

其他提示

罗盘 框架建议将您的 sass 样式表放在 app/stylesheets 下,将编译后的 css 放在 public/stylesheets/compiled 下。

您可以通过将以下代码添加到您的environment.rb来配置它:

Sass::Plugin.options[:template_location] = {
  "#{RAILS_ROOT}/app/stylesheets" => "#{RAILS_ROOT}/public/stylesheets/compiled"
}

如果您使用指南针框架,它会在您安装时为您设置此配置。

老实说,我喜欢在版本控制中使用已编译的 SASS 样式表。它们很小,仅当您的 .sass 文件更改时才会更改,并且将它们与应用程序的其余部分一起部署意味着 SASS 编译器不需要在生产中触发。

另一个优点(尽管很小)是,如果您不使用页面缓存,则您的 Rails 进程不需要对您的 public_html 目录。因此,利用您的服务器进行恶意攻击的方式就少了一种。

有些相关,但在 capistrano 部署期间重新生成 CSS 是个好主意。这个回调钩子就是这样做的:

after "deploy:update_code" do
  rails_env = fetch(:rails_env, "production")
  run "#{release_path}/script/runner -e #{rails_env} 'Sass::Plugin.update_stylesheets'"
end

更新: :对于现代版本的 Haml/Sass 来说,这应该不再是必要的。

如果我可以管理它,当我为项目选择 HAML/SASS 时,我喜欢将所有样式存储在 SASS 模板中,并且我将删除 application.css 和scaffold.css。然后我将SASS放在public/stylesheets/sass中,并将/public/stylesheets/*.css添加到.gitignore中。

如果我必须结合使用基于 SASS 和 CSS 的资产,那就有点复杂了。处理此问题的最简单方法是在 stylesheets 目录中为生成的 CSS 创建一个输出子目录,然后在 .gitignore 中排除该子目录。然后,在您的视图中,您必须通过选择 public/stylesheets/foo 样式表或 public/stylesheets/sass-out/foo 样式表来了解您正在使用哪种样式类型(SASS 或 CSS)。

如果您必须走第二条路线,请构建一个助手来抽象出 sass-out 子目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top