本人专职前端对 ruby 不熟,在使用 compass 过程中遇到个问题,就是 compass 默认编译xxoo.scss
为xxoo.css
,怎么自定义编译后的文件名(比如xxoo.s.css
),不知有描述清楚没,目的就是想xxoo.scss
编译成 xxoo.s.css
,非常感谢!
#4 楼 @aNd1coder 正常的命名约定是原来叫什么出来就叫什么,如果要做和约定不一致的事情,可以自己写编译命令调 scss 命令行生成文件。例如:
input = "xxoo.scss"
output = input.sub /scss$/, "s.css"
system "scss #{input} > #{output}"
另一种方法是加个 "xxoo.s.scss" 然后把对应的 import 进来
@import "xxoo";
还有种比较土的方法是,在 config.rb 中猴子补丁掉算名字的函数:
module Compass
module Actions
end
end
require "compass/compiler"
module Compass
class Compiler
def css_files
sass_files.map{|sass_file| corresponding_css_file(sass_file)}
end
def corresponding_css_file(sass_file)
"#{to}/#{stylesheet_name(sass_file)}.s.css"
end
end
end
然后用 ruby -r./config.rb -S compass
代替 compass
命令 (你可以在 ~/.bash_profile 加个 alias compass='ruby -r./config.rb -S compass'
简化以后的调用)
#8 楼 @aNd1coder 见我在 #7 楼 给出的解决方案,如果你可以改 compass 源码 (例如自己 fork 一份), 打开 lib/compass/compiler.rb , 找到 corresponding_css_file
, 把 ".css" 改成 ".s.css" 就可以。
@luikore 用批处理来解决这个问题了,不过我的config.rb
文件里面有定义其他的回调方法会报错
on_stylesheet_saved do |file|
css = File.read(file)
File.open(file, 'w') do |io|
io << AutoprefixerRails.compile(css)
end
end
错误提示是:
config.rb:21:in `<top (required)>': undefined method `on_stylesheet_saved' for main:Object (NoMethodError)
刚想到了个更好的办法避免出错,不改 config.rb, 只用一个 compass.bat, 内容如下:
@ruby.exe -x "%~dpnx0" %*
goto :eof
#!ruby
module Compass
module Actions
end
end
require "compass/compiler"
module Compass
class Compiler
def css_files
sass_files.map{|sass_file| corresponding_css_file(sass_file)}
end
def corresponding_css_file(sass_file)
"#{to}/#{stylesheet_name(sass_file)}.s.css"
end
end
end
gem 'compass'
load Gem.bin_path('compass', 'compass')
ruby -h
可以看到各参数的含义,例如 -x
参数是忽略 #!ruby
前面的代码