Sass gulp崩溃-SCSS错误:非法嵌套:只有属性可能嵌套在属性下

Sass gulp崩溃-SCSS错误:非法嵌套:只有属性可能嵌套在属性下,sass,neat,Sass,Neat,Gulp sass崩溃是因为一个错误-因为它崩溃了,一开始我甚至没有得到一个错误,然后我通过ruby编译器运行了sass,我得到了以下结果 错误neat/grid/_media.scss(第34行:非法嵌套:只有属性可以嵌套在属性下) 我看不出_media.scss有任何问题,因此我不知道错误消息指的是什么 我已经看到了有关Sass代码中此错误消息含义的Stackoverflow的答案,但我看不出此消息如何应用于Scss代码,因为缩进在Scss中不是问题 这里有一个指向错误消息中提到的niat/

Gulp sass崩溃是因为一个错误-因为它崩溃了,一开始我甚至没有得到一个错误,然后我通过ruby编译器运行了sass,我得到了以下结果

错误neat/grid/_media.scss(第34行:非法嵌套:只有属性可以嵌套在属性下)

我看不出_media.scss有任何问题,因此我不知道错误消息指的是什么

我已经看到了有关Sass代码中此错误消息含义的Stackoverflow的答案,但我看不出此消息如何应用于Scss代码,因为缩进在Scss中不是问题

这里有一个指向错误消息中提到的niat/grid/_media.scss的链接

这是混音的文件。

以下是错误消息中提到的文件中的实际代码:

@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崩溃的原因-前半天一直在寻找如何获得错误消息-这是一个错误真正问题的完美解决方案。