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



有一个ruby on rails项目,里面有很多scss文件。存储在cloudinary.com cdn中的图像。在源scs文件中有这样的结构:

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

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

这一切在更新之前都有效,使用旧的node、gulp-sas和node-sas库,但现在我们必须使用新版本。现在它不起作用了。

错误如下:Function cloudinary-url doesn't support keyword arguments

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

如果我理解正确,您将使用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));
  }
}

在编译sass的Node应用程序中包括并配置Cloudinary Node SDK。另请参见节点sass示例。

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

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

一口气,在编译完sass之后。。。

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

最新更新