Django-compressor: Sass、コンプレッサーを使用した場合と使用しない場合の結果が異なり、解析エラーが発生する

作成日 2017年02月15日  ·  11コメント  ·  ソース: django-compressor/django-compressor

こんにちは、Bootstrap 4 alpha 6 の使用中に問題が発生しました。BS4 をインクルードした後のすべての CSS がブラウザーによって無視されることに遭遇しました。 さらに掘り下げると、生成された CSS の解析エラーが見つかりました。

Django 1.8.17、Compressor 2.1.1、Sass 3.4.22 を使用しています

最初に見つけた解析エラーをここに文書化します。

エラーは二重引用符で"stroke='rgba(0, 0, 0, 0.5")',それがあるべき一方、 stroke='rgba(0, 0, 0, 0.5)' 。 これにより、ドキュメントで解析エラーが発生します。

無効な行 (dj コンプレッサー経由)

.navbar-light .navbar-toggler-icon {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5")' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }

有効な行 (sass direct 経由)

.navbar-light .navbar-toggler-icon {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }

コンパイル済みバージョンと一致します。

_background-image_のソース

$navbar-light-toggler-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"), "#", "%23") !default;

$navbar-light-color:                rgba($black,.5) !default;

$black:  #000 !default;

dj コンプレッサーで生成する方法

{% compress css %}
<link rel="stylesheet" type="text/x-scss" media="screen" charset="utf-8"
    href="/static/bootstrap/scss/bootstrap.scss" />
{% endcompress %}
COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'coffee --compile --stdio'),
    ('text/x-sass', 'sass {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
    ('text/x-scss', 'sass --scss {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
)
bug

全てのコメント11件

見た目がかなり悪い。 これを修正するための助けをいただければ幸いです。今後数週間は時間がないでしょう。

行ってみます。 私はあなたのコードベースに精通していないので、どこから始めるべきかについての指針/勘は非常に価値があります。

いくつかの考え:

  • これはCOMPRESS_ENABLED = False発生しますか?
  • Sassのバージョンが同じであることを再確認できますか? (これについては申し訳ありませんが、理論上、コンプレッサーが行っていることはすべて、入力を Sass に渡して処理することです。明らかに何かが起こっていますが、これは除外したいと思います。)

@carltongibson :

  • すでにCOMPRESS_ENABLED = Falseで実行されており、 Trueを設定した場合と同じ結果が観察されました。
  • これは、私がsassのバージョンを確認している方法です。 その環境でサーバーを実行する
$ sass -v 
Sass 3.4.22 (Selective Steve)

sass バージョンまたはビルド済みの bootstrap.css ファイルのいずれかをコンプレッサー ブロックに含めようとしました。その後に、有効な/解析可能な CSS のチェックライトとして本体の b ackground :greenを含むファイルが続きます。 ビルド済みの .css バージョンでは「緑」になっていますが、コンプレッサーがブートストラップを構築する .sass では「緑」になりません。

@wjdp OK ありがとうございます。 うーん。

その場合、 Compressor.precompileブレークポイントを設定することを提案できますか? まずcontentは正しく渡されていますか?

hunks()では、プリコンパイラから返されたvalueは正しいですか?

私は今これを調べています。 問題は #764 と同じです。 CssAbsoluteFilter はr'url\(([^\)]+)\)'を使用して URL を照合するため、最初の閉じ括弧で停止します。 正規表現は任意の数のネストされた括弧を処理できないため、次の 3 つのオプションがあります。

  1. ネストされた括弧のちょうど 1 つのレベルを扱います。
  2. よりインテリジェントなマッチング ロジックで適切に行う
  3. いくつかのライブラリを使用して css を解析します。

私はこれに多くの時間を費やしたくなく、オプション 1 を検討しています。より堅牢なソリューションを作成したい場合は、喜んでレビューします。

#828 で提案された修正。 実際にはネストされた括弧をまったく処理せず、開始引用符がある場合は閉じ引用符を期待するだけで (したがって、 url("data:...stroke='rgba(0, 0, 0, 0.5)一致しません)、安全のために data-uri は完全に無視されます。

@wjdp #828 を試してもらえますか? それはあなたが必要とすることをするはずですが、あなたの側でテストを実行することは良い確認になります.

やります

@carltongibson PR がこの問題を@karyon さん、とても迅速な作業をありがとうございました! :スマイル:

すごいですね~フォローありがとうございます。

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