Django-compressor: ساس ، نتائج مختلفة باستخدام ضاغط وبدون ، مما تسبب في أخطاء التحليل

تم إنشاؤها على ١٥ فبراير ٢٠١٧  ·  11تعليقات  ·  مصدر: django-compressor/django-compressor

مرحبًا ، أواجه مشكلة أثناء استخدام Bootstrap 4 alpha 6. واجهت أن جميع CSS بعد تضمين BS4 قد تجاهلها المتصفح. تم حفر أعمق وتم العثور على خطأ في تحليل ملف 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"); }

تتطابق مع النسخة المترجمة مسبقًا.

قوة من _خلفية الصورة_

$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;

كيف نولد عبر ضاغط دي جي

{% 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 -v 
Sass 3.4.22 (Selective Steve)

لقد حاولت تضمين إما إصدار sass أو ملف bootstrap.css الذي تم إنشاؤه مسبقًا في كتلة ضاغط متبوعًا بملف يحتوي فقط على body b ackground: أخضر كإشارة فحص لـ CSS صالح / قابل للتحليل. أحصل على "اللون الأخضر" لإصدار .css المبني مسبقًا ، ولكن ليس بالنسبة لـ .sass - حيث يبني الضاغط التمهيد.

wjdp موافق شكرا. أمم.

في هذه الحالة ، هل يمكنني اقتراح وضع نقطة توقف في Compressor.precompile ؟ أولاً ، هل تم تمرير content بشكل صحيح؟

ثم في hunks() تم إرجاع value من المترجم المسبق صحيحًا؟

أنا أبحث في هذا الآن. المشكلة هي نفسها # 764. يستخدم CssAbsoluteFilter r'url\(([^\)]+)\)' لمطابقة عناوين URL ، وبالتالي يتوقف عند قوس الإغلاق الأول. نظرًا لأن regex غير قادر على التعامل مع عدد عشوائي من الأقواس المتداخلة ، أرى ثلاثة خيارات:

  1. التعامل مع مستوى واحد بالضبط من الأقواس المتداخلة لأن ذلك يجب أن يكون كافيًا لأي شخص
  2. قم بذلك بشكل صحيح باستخدام منطق المطابقة الأكثر ذكاءً
  3. استخدام بعض المكتبات لتحليل css.

لا أرغب في قضاء الكثير من الوقت في هذا الأمر وأبحث في الخيار 1 ، إذا أراد أي شخص إنشاء حل أكثر قوة ، فسيسعدني مراجعة ذلك.

الإصلاح المقترح في رقم 828. إنه لا يتعامل فعليًا مع الأقواس المتداخلة على الإطلاق ، بل يتوقع فقط علامات اقتباس الإغلاق إذا كانت هناك علامات اقتباس افتتاحية (لذلك لن يتطابق url("data:...stroke='rgba(0, 0, 0, 0.5) ) ولكي تكون آمنًا ، يتم تجاهل بيانات uris تمامًا.

wjdp هل يمكنك تجربة # 828؟ يجب أن تفعل ما تحتاجه ولكن إجراء اختبار من جانبك سيكون تأكيدًا جيدًا.

سأفعل

هل يستطيع carltongibson تأكيد أن العلاقات العامة قد أصلحت هذه المشكلة بالنسبة لي. شكرًا لك @ karyon على عملك السريع جدًا! :ابتسامة:

رائع 👏🏽 شكرا على المتابعة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات