有一个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); //', ''))