Libsass: 添加选项以控制CSS内联导入行为

创建于 2015-10-28  ·  11评论  ·  资料来源: sass/libsass

我们添加了内联@import CSS局部函数的功能。 这与Ruby Sass的行为(根本不允许这样做)有很大不同,并且可以理解会引起痛苦

我们需要一个上下文选项来启用/禁用此功能。 默认情况下应禁用它。

Bug - Confirmed Dev - PR Ready Invalid - Not in Sass

最有用的评论

正如@xzyfer所说,尝试使用自定义导入器,我遇到一个问题,即我们在同一目录中有.scss文件和.css文件,这是我为node-sass制作的导入器

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

使用node-sass 4.5.2 libsass 3.5.0-beta2测试

所有11条评论

我认为措辞有点误导。 我们仅允许导入css局部变量(以.css结尾的东西将保留为代码中的实际导入)。 同样,Ruby Sass默认情况下不允许这样做,但是有一些工具(同样是AFAIK指南针)默认为Ruby Sass启用了此功能。 我也不确定我们是否真的要默认禁用它,因为这将是另一个潜在的重大更改。

class CSSImporter < Sass::Importers::Filesystem
  def extensions
    super.merge('css' => :scss)
  end
end
Sass::Plugin.options[:filesystem_importer] = CSSImporter

全面披露我仍然认为应该删除此功能。 我们的指令是做Ruby Sass的工作。 任何偏离其实现的行为都会破坏可移植性,并且与错误无法区别。

同样,Ruby Sass默认情况下不允许这样做,但是有一些工具(同样是AFAIK指南针)默认为Ruby Sass启用了此功能

这不是我们的工作。 这属于惠灵顿和眼镜之类的工具领域。

我也不确定我们是否真的要默认禁用它

我坚信应该。

这将是另一个潜在的突破性变化

就Sass用户而言,当前行为已被破坏。

我想很明显,我赞成拥有此功能,只是想指出这一点,主要是因为我为libsass 3.3.0实现了针对大量导入的错误消息。 此外,默认情况下,我们仅在部分解析(还包括css扩展名)方面有所不同,并且我认为通常您不会在_partial_导入旁边生成或具有相同名称的css。 不确定何时会在C-API上实现该选项。 欢迎贡献者;)

我认为理想的情况是它们都支持此功能。 第二个最好的事情就是@xzyfer所说的,至少

从理论上讲,您应该能够从libsass切换到ruby sass,而不会发生任何中断。 拥有可以故意阻止imo发生的事情是一件坏事。

从理论上讲,您应该能够从libsass切换到ruby sass

确切地。

接下来最好的事情就是@xzyfer所说的,至少

这就是我们要做的。

Sass 4.0将带来一种正确执行此操作的方法。

极好的! 等不及了。

@mgreter我已经与@chriseppstein@ nex3讨论了此问题。 我们已经确定,即使内联CSS导入在很大程度上破坏了Ruby Sass的兼容性,但删除此功能也可能会使用户感到不适。 这是Ruby Sass中长期以来要求的功能,由于CSS超集的局限性,所以无法实现。 结果,几乎某些人正在依赖这种行为。

相反,我们的目标是在4.0中删除它,因为用户更愿意接受主要版本中的重大更改,并且因为我们将拥有内联CSS导入的正式方法。

我们最近从较旧的版本切换到了最新版本的Node,并且不得不升级我们正在使用的第3方库,以与当前的Node版本兼容。 现在,由于这个错误,到处乱七八糟。 我知道libsass中尚未解决此问题,因此我试图递归找出要摆脱此问题需要依赖的依赖关系的哪个版本。

所以,有几个问题(很抱歉,如果我在这里错过了此信息,那么这个线程会有些混乱):

  1. 该错误引入了哪个版本的libsass?
  2. 该修复程序将引入哪个版本-3.5? 4.0?
  3. 该版本计划何时发布? (或者它已经被发布了?)

该错误引入了哪个版本的libsass?

我不能确定。 我认为大约在3.3.0左右,位于[email protected]中。

该修复程序将引入哪个版本-3.5? 4.0?

@use登陆后,此问题将在4.0中修复。 它将允许人们明确选择加入CSS导入。

该版本计划何时发布?

不幸的说不可能。 今年不太可能。


顺便说一句,如果您使用的是node-sass,则可以编写一个自定义导入程序以对.css文件进行noop导入。

正如@xzyfer所说,尝试使用自定义导入器,我遇到一个问题,即我们在同一目录中有.scss文件和.css文件,这是我为node-sass制作的导入器

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

使用node-sass 4.5.2 libsass 3.5.0-beta2测试

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

bdkjones picture bdkjones  ·  6评论

ashleykolodziej picture ashleykolodziej  ·  3评论

delijah picture delijah  ·  7评论

catamphetamine picture catamphetamine  ·  7评论

xzyfer picture xzyfer  ·  9评论