Libsass: node-sass 4.0.0にアップデートした後、CSSモジュールが機能しなくなりました

作成日 2016年12月12日  ·  7コメント  ·  ソース: sass/libsass

更新する前(node-sass 1.13.1)、以下は問題なく機能しました。

input.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バージョン( npm -v ):3.10.3
  • ノードバージョン( node -v ):6.7.0
  • ノードプロセス( node -p process.versions ):
    {http_parser: '2.7.0'、
    ノード: '6.7.0'、
    v8: '5.1.281.83'、
    uv: '1.9.1'、
    zlib: '1.2.8'、
    ares: '1.10.1-DEV'、
    icu:​​'57 .1 '、
    モジュール:「48」、
    openssl: '1.0.2j'}
  • ノードプラットフォーム( node -p process.platform ):ダーウィン
  • ノードアーキテクチャ( node -p process.arch ):x64
  • node-sassバージョン( node -p "require('node-sass').info" ):
    node-sass 4.0.0(ラッパー)[JavaScript]
    libsass 3.4.0(Sassコンパイラ)[C / C ++]
  • npm node-sassバージョン( npm ls node-sass ): [email protected]

最も参考になるコメント

@delijahアップグレードした後、コロンをエスケープすることでこれを再び機能させることができました。

\:global
    .my-global-class-name
        background-color: red

全てのコメント7件

このプロジェクトはSass言語の実装です。 私たちの目標は、Sassと100%互換性があることです。 Ruby Sassが同じ出力を生成するため、この問題を解決します。 今後、問題を開く前に、LibSassの出力がRubySassと異なることを確認してください。

Sass言語でファイルバグの機能を提案したい場合は、Sassで問題を開いてください-https://github.com/sass/sass

パッチが適用されたバグのため、LibSassでコンパイルしていました。 このコードは有効なSassではないため、コンパイルする必要はありません。 これは、RubySassでコードをテストすることで確認できます。

: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のエラーメッセージは私たちのメッセージよりもはるかに優れており、回避策を提案しています。 この動作を変更するには、 RubySassで機能リクエストを開く必要があります

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に:プレフィックス付きセレクターが含まれるよりもほぼ10年前のことです。 上で述べたように、この動作の変更はLibSassの範囲内ではなく、公式のSassチームが対処する必要があります。

一方、新しいscss構文は、(ほとんど)CSSのスーパーセットであることを保証します。 このため、 :プレフィックス付きセレクターは期待どおりに機能します。

@delijahアップグレードした後、コロンをエスケープすることでこれを再び機能させることができました。

\:global
    .my-global-class-name
        background-color: red

@mattfyshこれを確認できます。 「\」を使用すると問題が解決します。 今、私のsass-linterはそれが好きではありません;)私はそのための問題を開きます。

このページは役に立ちましたか?
0 / 5 - 0 評価