0

有一些 ruby​​-on-rails 项目有很多 scss 文件。存储在 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);源文件中的相同。怎么做?

4

1 回答 1

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));
  }
}

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

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

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

...并在 gulp 中,在编译 sass 之后...

.pipe(replace('url(dummy.jpg); //', ''))
于 2016-05-24T14:48:39.700 回答