Sass gulp崩溃-SCSS错误:非法嵌套:只有属性可能嵌套在属性下
Gulp sass崩溃是因为一个错误-因为它崩溃了,一开始我甚至没有得到一个错误,然后我通过ruby编译器运行了sass,我得到了以下结果 错误neat/grid/_media.scss(第34行:非法嵌套:只有属性可以嵌套在属性下) 我看不出_media.scss有任何问题,因此我不知道错误消息指的是什么 我已经看到了有关Sass代码中此错误消息含义的Stackoverflow的答案,但我看不出此消息如何应用于Scss代码,因为缩进在Scss中不是问题 这里有一个指向错误消息中提到的niat/grid/_media.scss的链接 这是混音的文件。 以下是错误消息中提到的文件中的实际代码:Sass gulp崩溃-SCSS错误:非法嵌套:只有属性可能嵌套在属性下,sass,neat,Sass,Neat,Gulp sass崩溃是因为一个错误-因为它崩溃了,一开始我甚至没有得到一个错误,然后我通过ruby编译器运行了sass,我得到了以下结果 错误neat/grid/_media.scss(第34行:非法嵌套:只有属性可以嵌套在属性下) 我看不出_media.scss有任何问题,因此我不知道错误消息指的是什么 我已经看到了有关Sass代码中此错误消息含义的Stackoverflow的答案,但我看不出此消息如何应用于Scss代码,因为缩进在Scss中不是问题 这里有一个指向错误消息中提到的niat/
@mixin media($query: $feature $value $columns, $total-columns: $grid- columns) {
@if length($query) == 1 {
@media screen and ($default-feature: nth($query, 1)) {
$default-grid-columns: $grid-columns;
$grid-columns: $total-columns !global;
@content;
$grid-columns: $default-grid-columns !global;
}
} @else {
$loop-to: length($query);
$media-query: "screen and ";
$default-grid-columns: $grid-columns;
$grid-columns: $total-columns !global;
@if is-not(is-even(length($query))) {
$grid-columns: nth($query, $loop-to) !global;
$loop-to: $loop-to - 1;
}
$i: 1;
@while $i <= $loop-to {
$media-query: $media-query + "(" + nth($query, $i) + ": " + nth($query, $i + 1) + ") ";
@if ($i + 1) != $loop-to {
$media-query: $media-query + "and ";
}
$i: $i + 2;
}
@media #{$media-query} {
@content;
$grid-columns: $default-grid-columns !global;
}
}
}
@mixin媒体($query:$feature$value$columns,$total columns:$grid-columns){
@如果长度($query)==1{
@媒体屏幕和($默认功能:第n个($query,1)){
$default grid columns:$grid columns;
$grid columns:$total columns!全局;
@内容;
$grid columns:$default grid columns!全局;
}
}@else{
$loop to:长度($query);
$media查询:“屏幕和”;
$default grid columns:$grid columns;
$grid columns:$total columns!全局;
@如果不是(是偶数(长度($query))){
$grid columns:n($query,$loop to)!全局;
$loop to:$loop to-1;
}
$i:1;
@虽然$i我从中学到的经验教训,我希望能为其他人节省很多时间:
当sass gulp崩溃时,很可能是sass/scss错误,而不是gulp错误。我不知道这一点,因为大多数语法错误都是通过gulp文件中的错误处理传输到控制台的,但事实证明,如果错误稍微严重一点,它仍然会导致gulp崩溃
当您从scss或sass文件中收到错误消息时,错误可能并不在该文件中。由于错误消息给出了错误的文件名,我最终随机禁用了所有文件以最终找到有问题的文件
我是在sass gulp重新开始工作后发现这一点的,当时我在_media.scss中注释掉了第10行和第37行,这两行是“@content”指令,尽管这些行甚至在_media.scss文件中实际上没有任何错误:
什么是@content指令?
这些指令从其他sass文件调用我的代码。当@content调用这些文件时,是我自己的文件在其他地方破坏了mixin并导致gulp崩溃
如果从有问题的文件中查找.find drawer类,您将看到所有媒体查询都嵌套在边距底部:-33px规则中
.find-drawer
margin-bottom: -33px
@include media(max-width $tablet-size)
margin-bottom: 0
@include media(max-width $small-screen)
margin-bottom: 0
@include media(max-width $mobile-screen)
margin-bottom: 0
这一定产生了一个非常疯狂的媒体查询,因为它被送入了_media.scss中的一个循环
我只是将媒体查询向左移动了几个空格,这样它们现在就嵌套在里面了
.find-drawer
margin-bottom: -33px
@include media(max-width $tablet-size)
margin-bottom: 0
@include media(max-width $small-screen)
margin-bottom: 0
@include media(max-width $mobile-screen)
margin-bottom: 0
呸!真是松了一口气!这里没有足够的信息来重现问题。您尝试过搜索错误吗?是的,我尝试过调试和搜索-使用@debug并输出所有变量,我可以通过删除一些代码使其运行-但我仍然不知道错误消息的含义。这没有什么错t mixin,你还没有提供足够的信息:eror消息通常意味着什么?无法编译我们的60个sass文件…真是一个噩梦-顺便说一句,谢谢你的否决票。我不知道为什么会被否决。我花了两天的时间试图找出sass gulp崩溃的原因-前半天一直在寻找如何获得错误消息-这是一个错误真正问题的完美解决方案。