在更新(node-sass 1.13.1)之前,以下工作没有任何问题:
输入.sass
:global
.my-global-class-name
background-color: red
现在我收到以下错误:
ERROR in ./~/css-loader?modules&importLoaders=2&camelCase&sourceMap!./~/postcss-loader?sourceMap=inline!./~/sass-loader?sourceMap!./app/styles/modules/resourceForm.sass
Module build failed:
.my-global-class-name
^
Illegal nesting: Only properties may be nested beneath properties.
in .../app/styles/modules/resourceForm.sass (line 7, column 9)
@ ./app/styles/modules/resourceForm.sass 4:14-254 13:2-17:4 14:20-260
版本信息:
$ node-sass --version
node-sass 4.0.0 (Wrapper) [JavaScript]
libsass 3.4.0 (Sass Compiler) [C/C++]
npm -v
):3.10.3node -v
):6.7.0node -p process.versions
):node -p process.platform
):darwinnode -p process.arch
):x64node -p "require('node-sass').info"
):npm ls node-sass
): [email protected]这个项目是 Sass 语言的一个实现。 我们的目标是与 Sass 100% 兼容。 我们正在关闭这个问题,因为 Ruby Sass 产生了相同的输出。 将来请在打开问题之前确认 LibSass 的输出与 Ruby Sass 不同。
如果您想建议 Sass 语言中文件错误的功能,请使用 Sass 打开一个问题 - https://github.com/sass/sass
由于已修补的错误,它正在使用 LibSass 进行编译。 这段代码不是有效的 Sass,不应该编译。 您可以通过使用 Ruby Sass 测试您的代码来确认这一点。
:global
.my-global-class-name
background-color: red
Error: Properties are only allowed within rules, directives, mixin includes, or other properties.
If ":global" should be a selector, use "\:global" instead.
on line 1 of test.sass
Use --trace for backtrace.
Ruby Sass 错误消息比我们的要好得多,并建议解决方法。 为了改变这种行为,您需要使用Ruby Sass打开一个功能请求
注意 CSS 模块语法在 scss 格式中有效
:global {
.my-global-class-name {
background-color: red
}
}
@xzyfer你知道为什么:global
不是有效的 Sass 吗? 它是一个有效的 CSS 选择器,并且在未来有更多的人在编写 Web 组件时使用:host
选择器时,它可能会变得更加普遍。
@jhnns这里有几个不同的元素。 OP 使用旧的缩进语法。
:global
.my-global-class-name
background-color: red
在该语法中, :foo
选择器具有特殊含义。 这比在 CSS 中包含:
前缀选择器早了将近十年。 正如我上面所说,改变这种行为不在 LibSass 的范围内,需要由官方 Sass 团队解决。
另一方面,较新的 scss 语法保证(大部分)是 CSS 的超集。 由于这个原因, :
前缀选择器按预期工作。
@delijah我通过转义冒号升级后能够再次工作,即
\:global
.my-global-class-name
background-color: red
@mattfysh我可以确认这一点。 使用“\”可以解决问题。 现在我的 sass-linter 不喜欢它;)我会为此打开一个问题。
最有用的评论
@delijah我通过转义冒号升级后能够再次工作,即