我在compass项目中遇到了一个不同的.css输出路径(到特定文件)的问题。
假设我有这样的目录树:
/
..Fonts
..Folder
..Images
..Sass
.._mixins.scss
..[other_stuff]
..Styles
..config.rb
这是我的config.rb
:
http_path = "/"
css_dir = "Styles"
sass_dir = "Sass"
images_dir = "Images"
javascripts_dir = "Scripts"
fonts_dir = "Fonts"
output_style = :nested
relative_assets = true
color_output = false
目标
我需要在"Folder"目录中使用sass,我的意思是一些example.scs文件必须编译成"文件夹"中的example.css。但是,我必须将compass与相关的url助手和"Sass/\umixins.scs"文件中定义的一些mixin一起使用。
问题
问题是,我不能为example.scss
指定不同的输出路径,因为scs的输出路径是在config.rb
(Styles
)中指定的,对吧?好的,所以我尝试将ruby代码添加到config.rb
中,以便在example.css从"Styles"目录编译到"Folder"目录后将其移动,如下所示:
require 'fileutils'
on_stylesheet_saved do |file|
if File.exists?(file) && File.basename(file) == "example.css"
puts "Moving: #{file}"
FileUtils.mv(file, File.dirname(file) + "/../Folder/" + File.basename(file))
end
end
但是,现在相对image-url()不能正常工作,因为它是在"Styles"目录中编译的,因此url是相对于这个目录而不是"Folder"目录的。
解决方案
所以我的问题是:实现这一点的最佳方法或破解方法是什么?
唯一合适的解决方案是将Galleria子项目转移到一个单独的项目中。你实际上有两个项目,为什么要把它们作为一个项目来管理?相反,在部署期间将它们分开并放在一起。
或者,从子项目中创建一个Compass扩展(如果其结构和您在其中所做的更改数量允许的话),并通过导入(直接或通过mixin)将必要的内容注入到主项目中。
一个肮脏的解决方案是使用符号链接:
cd Styles
ln -s ../Folder Folder
然后创建Sass/Folder/foo.sass
。
但这让compass compile
变得疯狂,每次都要重新创建整个项目(而不是只覆盖修改过的文件)。
您也可以尝试创建相反方向的符号链接,但必须确保您的web服务器允许以下符号链接