在命令行上提供sass变量定义

edA*_*a-y 1 sass

是否有标准或简单的方法在命令行上定义sass变量,或者从环境中传递它们?我正在做的是尝试从单个SCSS源文件创建不同的CSS文件.每个输出文件都将专门用于某个目标设备,并包含在带有媒体查询的HTML页面中.

更新:看起来这可能还不够.该@if语法实际上并没有允许有条件的青菜块,只有有条件的CSS块.这意味着即使我可以定义变量,也不允许我在文件中进行不同的处理.有任何想法吗?

Ily*_*nov 6

使用SASS自定义功能.一个完整的工作示例如下.

styles.sass:

$primary_color: getenv("SASS_VAR_PRIMARY_COLOR", white)

body
    background: $primary_color  
Run Code Online (Sandbox Code Playgroud)

sass_functions.rb:

module Sass::Script::Functions
    def getenv(name, default)
        assert_type name, :String
        value = ENV.fetch(name.value, nil)
        if not value
            return default
        end
        begin
            Sass::Script::Parser.parse(value, 0, 0)
        rescue
            Sass::Script::String.new(value)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

命令行:

SASS_VAR_PRIMARY_COLOR='#123456' sass -r ./sass_functions.rb styles.sass styles.css
Run Code Online (Sandbox Code Playgroud)

如果您使用Compass,您可以module Sass::Script::Functions直接放入config.rb并使用以下代码编译样式:

SASS_VAR_PRIMARY_COLOR='#123456' sass --compass styles.sass styles.css
Run Code Online (Sandbox Code Playgroud)