将scss编译为scss并且不应用未定义的函数

时间:2016-05-10 17:04:24

标签: ruby-on-rails sass cloudinary gulp-sass node-sass

有一些带有大量scss文件的ruby-on-rails项目。存储在cloudinary.com cdn中的图像。内部源scss文件有这样的结构:

.test {
  background-image: cloudinary-url("somepic.png",$width:10,$height:10);
}

然后我们尝试将所有scss文件编译成一个大的scss。 Cloudinary gem应该在部署期间替换正确的url。

这一切在更新前都有效,包括旧节点,gulp-sass和node-sass库,但现在我们必须使用新版本。现在它不起作用。

这是错误: Function cloudinary-url doesn't support keyword arguments

在编译期间,函数cloudinary-url确实没有定义。目标是以某种方式跳过未定义函数的处理。因此,在编译的scss文件中,我们应该具有与源文件中相同的background-image: cloudinary-url("somepic.png",$width:10,$height:10);。怎么做?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用Node编译sass,然后将结果包含在Rails应用程序中。也许您需要的是在Node应用程序的node-sass配置中定义自定义函数。 像(未经测试!):

functions: {
  "cloudinary-url": function( publicId, sassOptions) {
    var options = {}
    var i, l, key, value;

    for (i = 0, l = sassOptions.getLength(); i < l; i++) {
      key = sassOptions.getKey(i);
      value = sassOptions.getValue(i);
      options[key] = value
    }
    return new sass.types.String(cloudinary.url(publicId.getValue(), options));
  }
}

在您的Node应用程序中包含并配置编译sass的Cloudinary Node SDK。另请参阅node-sass samples

如果您希望将cloudinary-url原样传递给Rails应用程序,我建议将其添加为注释并在后处理中替换它(例如使用gulp-replace)。

.test {
  background-image: url(dummy.jpg); //cloudinary-url("somepic.png",$width:10,$height:10);
}

......并且在编译了sass之后...... [/ p>

.pipe(replace('url(dummy.jpg); //', ''))