Ruby-Sass Cli

Ruby Sass 可执行文件可以通过两种模式之一调用。

一对一模式

bash
sass [input.scss] [output.css]

一对一模式将单个输入文件 (input.scss) 编译到单个输出位置 (output.css)。如果未传递输出位置,则编译后的 CSS 将打印到终端。如果未传递输入或输出,则从 标准输入 读取 CSS 并打印到终端。

如果输入文件的扩展名为 .scss,则将其解析为 SCSS;如果输入文件的扩展名为 .sass,则将其解析为 缩进语法。如果它没有这两个扩展名之一,或者它来自标准输入,则默认情况下将其解析为缩进语法。这可以通过 --scss 标志 进行控制。

多对多模式

bash
sass [<input.css>:<output.css>] [<input/>:<output/>] [input.css] [input/]...

多对多模式将一个或多个输入文件编译为一个或多个输出文件。输入与输出用冒号分隔。它还可以将目录中的所有 Sass 文件编译为另一个目录中同名的 CSS 文件。当任何参数包含冒号,或传递 --update 标志--watch 标志 时,将启用多对多模式。

如果传递的输入文件没有相应的输出文件,则该文件将被编译为以输入文件命名的 CSS 文件,但扩展名将替换为 .css。如果传递的输入目录没有相应的输出目录,则其中的所有 Sass 文件都将编译为同一目录中的 CSS 文件。

bash
$ sass style.scss:style.css
      write style.css
      write style.css.map
$ sass light.scss:light.css dark.scss:dark.css
      write light.css
      write light.css.map
      write dark.css
      write dark.css.map
$ sass themes:public/css
      write public/css/light.css
      write public/css/light.css.map
      write public/css/dark.css
      write public/css/dark.css.map

编译整个目录时,Sass 将忽略名称以 _ 开头的 部分文件。您可以使用部分文件来分离样式表,而无需创建一堆不必要的输出文件。

多对多模式将仅编译依赖项修改时间比生成相应 CSS 文件时间更近的样式表。它还会在更新样式表时打印状态消息。

选项

Common

--load-path

此选项(缩写为 -I)为 Sass 添加额外的 加载路径 以查找样式表。可以多次传递此选项以提供多个加载路径。较早的加载路径将优先于较晚的加载路径。

bash
$ sass --load-path=node_modules/bootstrap/dist/css style.scss style.css

如果已设置,则还会从 SASS_PATH 环境变量 加载加载路径。此变量应为以 ; (在 Windows 上) 或 : (在其他操作系统上) 分隔的路径列表。SASS_PATH 上的加载路径优先于在命令行上传递的加载路径。

bash
$ SASS_PATH=node_modules/bootstrap/dist/css sass style.scss style.css

--require

此选项(缩写为 -r)在运行 Sass 之前加载 Ruby gem。它可用于将 Ruby 中定义的函数加载到您的 Sass 环境中。

bash
$ sass --require=rails-sass-images style.scss style.css

--compass

此标志加载 Compass 框架 并使其 mixins 和函数可在 Sass 中使用。

bash
$ sass --compass style.scss style.css

--style

此选项(缩写为 -t)控制生成的 CSS 的输出样式。Ruby Sass 支持四种输出样式:

  • nested(默认)缩进 CSS 规则以匹配 Sass 源的嵌套。
  • expanded 将每个选择器和声明写在自己的行上。
  • compact 将每个 CSS 规则放在自己的一行上。
  • compressed 删除尽可能多的多余字符,并将整个样式表写在一行上。
bash
$ sass --style=nested
sass
h1 {
  font-size: 40px; }
  h1 code {
    font-face: Roboto Mono; }
bash
$ sass --style=expanded style.scss
scss
h1 {
  font-size: 40px;
}
h1 code {
  font-face: Roboto Mono;
}
bash
$ sass --style=compact style.scss
css
h1 { font-size: 40px; }
h1 code { font-face: Roboto Mono; }
bash
$ sass --style=compressed style.scss
h1{font-size:40px}h1 code{font-face:Roboto Mono}

--help

此标志(缩写为“-h”和“-?”)打印此文档的摘要。

bash
$ sass --help
Usage: sass [options] [INPUT] [OUTPUT]

Description:
  Converts SCSS or Sass files to CSS.

...

--version

此标志打印 Sass 的当前版本。

bash
$ sass --version

关注并更新

这些选项影响多对多模式

--watch

启用 多对多模式,并使 Sass 保持打开状态,并在样式表或其依赖项发生变化时继续编译样式表。

bash
$ sass --watch themes:public/css
      write public/css/light.css
      write public/css/light.css.map

# Then when you edit themes/dark.scss...
      write public/css/dark.css
      write public/css/dark.css.map

--poll

此标志只能与 --watch 一起传递,它告诉 Sass 每隔一段时间手动检查源文件的更改,而不是依靠操作系统在发生更改时通知它。如果您在操作系统的通知系统不起作用的远程驱动器上编辑 Sass,则可能需要这样做。

bash
$ sass --watch --poll themes:public/css
      write public/css/light.css
      write public/css/light.css.map

# Then when you edit themes/dark.scss...
      write public/css/dark.css
      write public/css/dark.css.map

--update

此标志启用多对多模式,即使所有参数都不是冒号分隔的对。

bash
$ sass --update style.scss
      write style.css
      write style.css.map

--force

此标志(缩写为 -f)只能在 多对多模式 下传递。它会导致 Sass 文件 始终 被编译为 CSS 文件,而不是仅在源文件比输出更新时才进行编译。

--force 标志不能与 --watch 标志 一起传递。

bash
$ sass --force style.scss:style.css
      write style.css
      write style.css.map

--stop-on-error

此标志只能在 多对多模式 下传递。它告诉 Sass 在检测到错误时立即停止编译,而不是尝试编译可能不包含错误的其他 Sass 文件。

bash
$ sass --stop-on-error themes:public/css
Error: Invalid CSS after "h1 {font-size: ": expected expression (e.g. 1px, bold), was "}"
        on line 1 of test.scss
  Use --trace for backtrace.

输入和输出

这些选项控制 Sass 如何加载其输入文件以及如何生成输出文件。

--scss

此标志告诉 Sass 将 标准输入 解析为 SCSS

bash
$ echo "h1 {font-size: 40px}" | sass --scss
h1 {
  font-size: 40px;
}

--sourcemap

此选项控制 Sass 如何生成源映射,这些文件会告诉浏览器或其他使用 CSS 的工具该 CSS 如何与生成它的 Sass 文件相对应。它们使您可以在浏览器中查看甚至编辑 Sass 文件。请参阅 ChromeFirefox 中有关使用源映射的说明。它有四个可能的值:

  • auto(默认值)尽可能使用相对 URL 从源映射链接到 Sass 样式表,否则使用绝对 file: URL
  • file 始终使用绝对 file: URL 从源映射链接到 Sass 样式表。
  • inline 直接在源映射中包含 Sass 样式表的文本。
  • none 根本不生成源映射。
bash
# 生成类似“../sass/style.scss”的 URL。
$ sass --sourcemap=auto sass/style.scss css/style.css

# 生成类似“file:///home/style-wiz/sassy-app/sass/style.scss”的 URL。
$ sass --sourcemap=file sass/style.scss css/style.css

# 在源映射中包含 sass/style.scss 的全文。
$ sass --sourcemap=inline sass/style.scss css/style.css

# 不生成源映射。
$ sass --sourcemap=none sass/style.scss css/style.css

--stdin

此标志(缩写为 -s)指示 Sass 从 标准输入 读取其输入文件。传递此标志时,不得传递任何输入文件。

bash
$ echo -e 'h1\n  font-size: 40px' | sass --stdin
h1 {
  font-size: 40px;
}

--stdin 标志不能与 多对多模式 一起使用。

--default-encoding

此选项(缩写为 -E)控制 Sass 在加载未 明确指定 字符编码的源文件时使用的默认 字符编码。默认为操作系统的默认编码。

bash
$ sass --default-encoding=Shift-JIS style.scss style.css

--unix-newlines

此标志指示 Sass 生成输出文件,其行以 U+000A 换行符分隔,而不是操作系统默认设置(在 Windows 上,这是 U+000D 回车符,后跟 U+000A 换行符)。在默认使用 Unix 样式换行符的系统上,此标志始终正确。

bash
$ sass --unix-newlines style.scss style.css

--debug-info

此标志(缩写为 -g)使 Sass 发出虚拟 @media 查询,指示源样式表中每个样式规则的定义位置。

⚠️ Heads up!

此标志仅用于向后兼容。源映射现在是将 CSS 映射回生成它的 Sass 的推荐方式。

bash
$ sass --debug-info style.scss
@media -sass-debug-info{filename{font-family:file\:\/\/\/home\/style-wiz\/sassy-app\/style\.scss}line{font-family:\000031}}
h1 {
  font-size: 40px; }

此标志(也可用作 --line-numbers,缩写为 -l)使 Sass 为每个样式规则发出注释,以指示每个样式规则在源样式表中的定义位置。

bash
$ sass --line-numbers style.scss
/* line 1, style.scss */
h1 {
  font-size: 40px; }

Other Options

--interactive

此标志(缩写为 -i)指示 Sass 以交互模式运行,您可以在其中编写 SassScript 表达式 并查看其结果。交互模式还支持 变量

bash
$ sass --interactive
>> 1px + 1in
97px
>> $map: ("width": 100px, "height": 70px)
("width": 100px, "height": 70px)
>> map-get($map, "width")
100px

--check

此标志(缩写为 -c)指示 Sass 验证其输入文件的语法是否有效,而无需执行该文件。如果语法有效,则退出时 status 为 0。它不能在 多对多模式 中使用。

bash
$ sass --check style.scss

--precision

此选项指示 Sass 在发出十进制数时使用多少位 精度

bash
$ echo -e 'h1\n  font-size: (100px / 3)' | sass --precision=20
h1 {
  font-size: 33.333333333333336px; }

--cache-location

此选项告诉 Sass 在哪里存储已解析文件的缓存,以便它在将来的调用中运行得更快。它默认为 .sass-cache

bash
$ sass --cache-location=/tmp/sass-cache style.scss style.css

--no-cache

此标志(缩写为 -C)告诉 Sass 根本不要缓存已解析的文件。

bash
$ sass --no-cache style.scss style.css

--trace

此标志告诉 Sass 在遇到错误时打印完整的 Ruby 堆栈跟踪。它由 Sass 团队用于调试错误。

bash
Traceback (most recent call last):
  25: from /usr/share/gems/sass/bin/sass:13:in `<main>'
  24: from /usr/share/gems/sass/lib/sass/exec/base.rb:18:in `parse!'
  23: from /usr/share/gems/sass/lib/sass/exec/base.rb:50:in `parse'
  22: from /usr/share/gems/sass/lib/sass/exec/sass_scss.rb:63:in `process_result'
  21: from /usr/share/gems/sass/lib/sass/exec/sass_scss.rb:396:in `run'
  20: from /usr/share/gems/sass/lib/sass/engine.rb:290:in `render'
  19: from /usr/share/gems/sass/lib/sass/engine.rb:414:in `_to_tree'
  18: from /usr/share/gems/sass/lib/sass/scss/parser.rb:41:in `parse'
  17: from /usr/share/gems/sass/lib/sass/scss/parser.rb:137:in `stylesheet'
  16: from /usr/share/gems/sass/lib/sass/scss/parser.rb:697:in `block_contents'
  15: from /usr/share/gems/sass/lib/sass/scss/parser.rb:707:in `block_child'
  14: from /usr/share/gems/sass/lib/sass/scss/parser.rb:681:in `ruleset'
  13: from /usr/share/gems/sass/lib/sass/scss/parser.rb:689:in `block'
  12: from /usr/share/gems/sass/lib/sass/scss/parser.rb:697:in `block_contents'
  11: from /usr/share/gems/sass/lib/sass/scss/parser.rb:708:in `block_child'
  10: from /usr/share/gems/sass/lib/sass/scss/parser.rb:743:in `declaration_or_ruleset'
   9: from /usr/share/gems/sass/lib/sass/scss/parser.rb:820:in `try_declaration'
   8: from /usr/share/gems/sass/lib/sass/scss/parser.rb:1281:in `rethrow'
   7: from /usr/share/gems/sass/lib/sass/scss/parser.rb:807:in `block in try_declaration'
   6: from /usr/share/gems/sass/lib/sass/scss/parser.rb:999:in `value!'
   5: from /usr/share/gems/sass/lib/sass/scss/parser.rb:1161:in `sass_script'
   4: from /usr/share/gems/sass/lib/sass/script/parser.rb:68:in `parse'
   3: from /usr/share/gems/sass/lib/sass/script/parser.rb:855:in `assert_expr'
   2: from /usr/share/gems/sass/lib/sass/script/lexer.rb:240:in `expected!'
   1: from /usr/share/gems/sass/lib/sass/scss/parser.rb:1305:in `expected'
test.scss:1: Invalid CSS after "h1 {font-size: ": expected expression (e.g. 1px, bold), was "}" (Sass::SyntaxError)

--quiet

此标志(缩写为 -q)告诉 Sass 在编译时不要发出任何警告。默认情况下,当使用弃用的功能或遇到 @warn 规则 时,Sass 会发出警告。它还会使 @debug 规则 静音。

bash
$ sass --quiet style.scss style.css