2008-10-21 16 views
41

मैं एक साधारण पायथन स्क्रिप्ट की तलाश में हूं जो वेब साइट परिनियोजन प्रक्रिया के हिस्से के रूप में सीएसएस को कम कर सकता है। (पाइथन सर्वर पर समर्थित एकमात्र स्क्रिप्टिंग भाषा है और CSS Utils जैसे पूर्ण उड़ा पार्सर्स इस प्रोजेक्ट के लिए ओवरकिल हैं)।पायथन स्क्रिप्ट?

मूल रूप से मुझे सीएसएस के लिए jsmin.py चाहिए। कोई निर्भरता वाले एक स्क्रिप्ट।

कोई भी विचार?

उत्तर

64

यह मेरे लिए पाइथन में जाने के लिए एक अच्छा काम लग रहा था, जो थोड़ी देर के लिए लंबित है। मैं इसके द्वारा मेरा पहला कभी अजगर स्क्रिप्ट मौजूद:

import sys, re 

css = open(sys.argv[1] , 'r').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]) 

मेरा मानना ​​है कि यह काम करने के लिए, और उत्पादन इस पर हाल ही में सफारी, ओपेरा, और Firefox ठीक परीक्षण करती है। यह अंडरस्कोर &/**/हैक्स के अलावा सीएसएस हैक्स तोड़ देगा! यदि आपके पास बहुत सारे हैक चल रहे हैं (या उन्हें एक अलग फ़ाइल में रखें) तो एक मिनीफायर का उपयोग न करें।

मेरी पायथन पर किसी भी सुझाव की सराहना की। कृपया नम्र हो हालांकि, यह मेरा पहला समय है। :-)

+1

आप एक क्रम में पिछले तत्व का उल्लेख करने के सूचकांक -1 उपयोग कर सकते हैं। तो आप .insert() के बजाय .append() का उपयोग कर सकते हैं, और .reverse() से बचें। इसके अलावा, यदि लेन (एलएसटी)> 0: आमतौर पर किया जाता है जैसे कि lst: – recursive

+1

युक्तियों के लिए धन्यवाद। मैंने इन और कुछ अन्य चीजों को ठीक कर दिया है। पायथन वास्तव में एक अच्छी भाषा है। :-) – Borgar

+0

बस कमाल है। सबसे अच्छा हिस्सा यह है कि यह अब एक तैनाती स्क्रिप्ट का हिस्सा बनने जा रहा है! – Soviut

1

मुझे किसी भी तैयार किए गए पायथन सीएसएस मिनीफायर के बारे में पता नहीं है, लेकिन जैसा कि आपने कहा है कि सीएसएस यूटिल के पास विकल्प है। यह जांचने और सत्यापित करने के बाद कि लाइसेंस इसके लिए अनुमति देता है, आप स्रोत कोड से गुजर सकते हैं और उन हिस्सों को बाहर निकाल सकते हैं जो स्वयं को खनन करते हैं। फिर इसे एक स्क्रिप्ट और वॉयला में चिपकाएं! तुम वहाँ जाओ।

एक सिर शुरू होने के रूप में, csscombine फ़ंक्शन .../trunk/src/cssutils/script.py लाइन 361 के आसपास कहीं भी खनन करने का काम करता है (मैंने संशोधन 14 99 की जांच की है)। "Minify" नामक बुलियन फ़ंक्शन तर्क पर ध्यान दें।

12

पाइथन के लिए उपलब्ध यूयूआई के सीएसएस कंप्रेसर का एक बंदरगाह है।

यहाँ PyPi पर अपनी परियोजना पृष्ठ है: http://pypi.python.org/pypi/cssmin/0.1.1

+0

दुर्भाग्यवश अब बनाए रखा नहीं जा रहा है। – Wtower

+2

** rCSSMin ** एक और बंदरगाह है और लगता है बनाए रखा: cssminifier साइट से https://github.com/ndparker/rcssmin – Brutus

1

एक अच्छा ऑनलाइन उपकरण cssminifier जो भी एक एपीआई जो बहुत सरल और प्रयोग करने में आसान है नहीं है। मैंने एक छोटी पायथन लिपि बनाई है जो उस टूल के एपीआई में सीएसएस फ़ाइल सामग्री पोस्ट करता है, मिनीफाईड सीएसएस देता है और इसे "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() 
+2

: http://cssminifier.com/python –

+0

मैं त्रुटि मिली, अनुरोध http «करने के लिए भेजने की कोशिश कर »यूआरएल Cssminifier.com के «https» urls और javascript-minifier.com ठीक काम करता है। –

1

मामले में किसी को इस सवाल पर उतरा और Django उपयोग कर रहा है, इस मामले Django Compressor कहा जाता है के लिए एक अधिक इस्तेमाल किया पैकेज है :

लिंक किए गए और इनलाइन जावास्क्रिप्ट या सीएसएस को एक कैश की गई फ़ाइल में संपीड़ित करता है।

  • जे एस/सीएसएस टेम्पलेट्स में संबंधित

  • लचीलापन

  • यह रास्ता

  • पूर्ण टेस्ट स्वीट

1

में नहीं मिलता हैमेंदस्तावेज़ आप एकाधिक कंप्रेसर और कंपाइलरों के लिंक पा सकते हैं। उस सूची से मैंने pyScss चुना है, जो परिणामी सीएसएस को भी कम करता है।

तुम सिर्फ एक सीएसएस कंप्रेसर की जरूरत है आप csscompressor कोशिश कर सकते हैं:

YUI सीएसएस कंप्रेसर के लगभग सटीक बंदरगाह। सभी मूल unittests पास करता है। वेब के लिए

स्टैंडअलोन Async एकल फ़ाइल पार मंच यूनिकोड के लिए तैयार python3 Prettifier Beautifier:

एक अधिक सामान्य उपकरण css-html-prettify है।

संबंधित मुद्दे