有一些带有大量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);
。怎么做?
答案 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); //', ''))