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 libsass3.5.0-beta2でテスト済み

全てのコメント11件

言葉遣いは少し誤解を招くと思います。 cssパーシャルのインポートのみを許可します(.cssで終わるものはコード内の実際のインポートとして残されます)。 また、Ruby Sassはデフォルトでこれを許可していませんが、いくつかのツール(AFAIKコンパスも)はRubySassでこれをデフォルトで有効にします。 また、これは別の潜在的に重大な変更になるため、デフォルトで本当に無効にするかどうかもわかりません。

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

完全な開示私はまだこの機能を削除する必要があると思います。 私たちの指令は、RubySassが行うことを実行することです。 それらの実装からの逸脱は移植性を損ない、バグと見分けがつきません。

また、Ruby Sassはデフォルトでこれを許可していませんが、いくつかのツール(AFAIKコンパスも)はRubySassでこれをデフォルトで有効にします

これは私たちの仕事ではありません。 これは、ウェリントンや眼鏡などのツールの領域に属しています。

また、デフォルトで本当に無効にするかどうかもわかりません

私はそれがすべきだと強く信じています。

これは別の潜在的に壊れる変化になるでしょう

Sassユーザーに関する限り、現在の動作は壊れています。

私がこの機能を使用することに賛成していることは明らかだと思います。破損は主に、libsass3.3.0のあいまいなインポートのエラーメッセージを実装したためだけであることを指摘したいと思います。 それに加えて、デフォルトでは部分的な解決(css拡張機能も含む)のみが異なり、通常、_partial_importの横に同じ名前のcssを生成または持たないことを主張します。 C-APIのオプションとしてそれを実装するためにいつ来るのかわからない。 寄稿者を歓迎します;)

理想的な状況は、両方がこの機能をサポートしていることだと思います。 次善の策は、

理論的には、何も壊すことなくlibsassからrubysassに切り替えることができるはずです。 故意にこれが起こるのを防ぐ何かを持っていることは悪いことです。

理論的には、何も壊すことなくlibsassからrubysassに切り替えることができるはずです。

丁度。

次善の策は、

これが私たちがすることです。

Sass 4.0は、これを適切に行う方法をもたらします。

素晴らしい! 待ちきれません。

@mgreterこの問題について@chriseppstein@ nex3に話しました。 CSSインポートのインラインはRubySassの互換性を大幅に損なうものの、この機能を削除するとユーザーを混乱させる可能性があると判断しました。 これはRubySassで長い間要求されてきた機能であり、CSSスーパーセットであるという制限のために不可能でした。 その結果、ほぼ特定の人々がこの行動に依存しています。

代わりに、4.0でこれを削除することを目指しましょう。ユーザーはメジャーリリースでの重大な変更をより受け入れており、CSSインポートをインライン化する公式の方法があるからです。

最近、以前のバージョンから最新バージョンのNodeに切り替え、現在のNodeバージョンと互換性を持たせるために、使用しているサードパーティのライブラリをアップグレードする必要がありました。 今、このバグのために物事は至る所で壊れています。 この問題はlibsassでまだ解決されていないことを理解しているので、この問題を取り除くためにどのバージョンの依存関係に戻る必要があるかを再帰的に把握しようとしています。

したがって、いくつかの質問があります(申し訳ありませんが、ここでこの情報を見逃した場合、このスレッドは少し複雑です):

  1. このバグが導入されたのはどのバージョンのlibsassですか?
  2. 修正はどのバージョンになりますか-3.5? 4.0?
  3. そのバージョンはいつリリースされる予定ですか? (または、おそらくすでにリリースされていますか?)

このバグが導入されたのはどのバージョンのlibsassですか?

確信が持てません。 [email protected]にある3.3.0前後だったと思います

修正はどのバージョンになりますか-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 libsass3.5.0-beta2でテスト済み

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