【问题标题】:Compile scss to scss and don't apply functions that are not defined将scss编译成scss,不要应用未定义的函数
【发布时间】:2016-05-10 17:04:24
【问题描述】:

有一些 ruby​​-on-rails 项目包含很多 scss 文件。存储在 cloudinary.com cdn 中的图像。在源 scss 文件中有这样的结构:

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

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

这一切在更新之前都可以使用,使用旧的 node、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);。该怎么做?

【问题讨论】:

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


    【解决方案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 samples

    如果您希望将 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); //', ''))
    

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      相关资源
      最近更新 更多