如何通过Sass::Script::Functions添加自定义函数到Sass?

4
我正在使用纯Sass(不使用Compass / SUZY / Bourbon等)并且我不知道应该把我的*.rb文件放在哪里。虽然我不是Ruby程序员,但我找到了别人编写的函数,可以满足我的需求。我尝试过搜索,但结果都是死路一条。
官方文档本身没有提供任何线索,只有如何创建自定义函数的信息: http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#adding_custom_functions
sass styles.scss styles.css -r custom.rb

尝试了这个解决方案后(尽管我能够VI文件),出现了“LoadError: no such file to load -- static/sass/modules/lib/custom.rb”错误:http://www.seancolombo.com/2010/07/28/how-to-make-and-use-a-custom-sass-function/。我找到了与此最接近的 SO 问题,但我没有使用 Compass 或 Rails,所以这些解决方案对我来说毫无意义:How do I load extensions to the Sass::Script::Functions module?
我希望将自定义功能保留在模块目录中(其中包含我自己的自定义 Bootstrap 库)。如果必须放在其他地方,我也可以接受。
2个回答

2
在Rails 4中,这非常简单。在config/initializer/文件夹中创建一个sass.rb文件,并将您的模块放在其中。
例如,使用此随机函数:https://gist.github.com/chriseppstein/1561650
module Sass::Script::Functions
  def random(*args)
    #...buncha code
  end
end

将这段代码放入config/initializers/sass.rb文件中,你就可以在任何.scss/.sass样式表中使用它了:

.greet{
  position: absolute;
  top: random(200px);
  left: random(200px);
  height: random(200px);
  width: random(200px);
  background-color: blue;

}

1

尝试按照第二个链接中的说明,但是指定到你的 ruby 文件的绝对路径。在我的机器上,如果给定相对路径,SASS 会发现文件有问题。


是的,那似乎可以工作。也许有更好的方法来添加自定义函数吗?我的文件的绝对路径相当长。实际上更麻烦,因为我无论如何都要从shell脚本中运行命令。 - cimmanon
我同意,这真是个麻烦事!我猜测这是因为 Ruby 1.9 中有一个更改,将当前目录从加载路径列表中删除了,所以您可能需要向 SASS 开发人员提交一个错误报告。我不知道是否有任何更好的方法来包含自定义函数。 - hopper
2
经过进一步的研究,-r ./static/sass/modules/lib/custom.rb 将会起作用,不需要使用绝对路径。 - cimmanon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接