سؤال

أنا أبحث عن البساطة بيثون السيناريو الذي يمكن أن صغر CSS كجزء من موقع ويب النشر العملية.(بيثون هي فقط لغة البرمجة المعتمدة على الخادم كاملة موزعي مثل CSS تيلس هناك مبالغة في هذا المشروع).

أساسا أنا أحب jsmin.py CSS.واحد النصي مع أي تبعيات.

أي أفكار ؟

هل كانت مفيدة؟

المحلول

وهذا يبدو وكأنه مهمة جيدة بالنسبة لي للوصول الى الثعبان، والتي ظلت معلقة لفترة من الوقت. أقدم بموجب هذا أول النصي الثعبان من أي وقت مضى:

import sys, re

with open( sys.argv[1] , 'r' ) as f:
    css = f.read()

# remove comments - this will break a lot of hacks :-P
css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack
css = re.sub( r'/\*[\s\S]*?\*/', "", css )
css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack

# url() doesn't need quotes
css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css )

# spaces may be safely collapsed as generated content will collapse them anyway
css = re.sub( r'\s+', ' ', css )

# shorten collapsable colors: #aabbcc to #abc
css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css )

# fragment values can loose zeros
css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css )

for rule in re.findall( r'([^{]+){([^}]*)}', css ):

    # we don't need spaces around operators
    selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )]

    # order is important, but we still want to discard repetitions
    properties = {}
    porder = []
    for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ):
        key = prop[0].strip().lower()
        if key not in porder: porder.append( key )
        properties[ key ] = prop[1].strip()

    # output rule if it contains any declarations
    if properties:
        print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) 

وأعتقد أن هذا العمل، والإخراج هو يختبر بشكل جيد على الأخير سفاري، أوبرا، وفايرفوكس. وسوف كسر الخارقة CSS أخرى من تسطير و/ ** / الخارقة! لا تستخدم minifier إذا كان لديك الكثير من الخارقة مستمرة (أو وضعها في ملف منفصل).

وأي نصائح حول بلدي الثعبان تقدير. يرجى أن يكون لطيف على الرغم من انها المرة الأولى. : -)

نصائح أخرى

وهناك ميناء ضاغط CSS YUI لمن يرغب من الثعبان.

وهنا هو صفحة المشروع على PyPi: http://pypi.python.org/pypi/cssmin/0.1.1

في حالة شخص ما هبطت على هذا السؤال و هو استخدام جانغو ، هناك استخداما حزمة هذه المسألة تسمى جانغو ضاغط:

كمادات المرتبطة والمضمنة جافا سكريبت أو CSS في واحد ملف ذاكرة التخزين المؤقت.

  • JS/CSS تنتمي في القوالب

  • المرونة

  • أنها لا تحصل في الطريق

  • اختبار كامل جناح

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

ووبدء الرأس وظيفة csscombine في ... / جذع / SRC / cssutils / script.py يبدو للقيام بهذا العمل من تصغير في مكان ما حول خط 361 (راجعت مراجعة 1499). لاحظ حجة منطقية وظيفة تسمى "صغر".

وهناك أداة على الانترنت لطيفة cssminifier التي لديها أيضا API التي هي بسيطة جدا وسهلة الاستخدام. لقد تقدمت النصي الثعبان الصغير الذي ظائف محتوى الملف CSS لAPI تلك الأداة، وإرجاع CSS minifed وحفظها في ملف "style.min.css". أنا أحب ذلك لأنه هو رمز الصغيرة التي قد تكون متكاملة بشكل جيد في السيناريو الانتشار الآلي:

import requests
f = open("style.css", "r")
css_text = f.read()
f.close()
r = requests.post("http://cssminifier.com/raw", data={"input":css_text})
css_minified = r.text
f2 = open("style.min.css", "w")
f2.write(css_minified)
f2.close()

webassets مستندات يمكنك العثور على روابط لعدة الضواغط والمجمعين. من تلك القائمة وقد اخترت pyScss ، التي minifies أيضا CSS الناتجة عن ذلك.

إذا كنت بحاجة فقط ضاغط CSS يمكنك محاولة csscompressor :

<اقتباس فقرة>   

والميناء المحدد تقريبا ضاغط YUI CSS. يمر كل unittests الأصلي.

وهناك أداة أكثر عمومية هي المغلق، أتش تي أم أل تجميل :

<اقتباس فقرة>   

ومستقل عدم التزامن ملف واحد عبر منصة يونيكود جاهزة Python3 Prettifier المجمل للويب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top