2009-08-31 12 views
9

क्या किसी को अपलोड पर प्रसंस्करण स्क्रिप्ट के माध्यम से स्वचालित रूप से कुछ फ़ाइल प्रकार चलाने के लिए एक अच्छा तरीका पता है? जब मैं सर्वर पर एक छोटा सा रखने के दौरान स्थानीय पक्ष पर एक अच्छा, मानव-पठनीय संस्करण रखते हुए, सर्वर पर अपलोड करते समय स्वचालित रूप से सीएसएस और जावास्क्रिप्ट को स्वचालित रूप से छोटा करने की कोशिश कर रहा हूं। मैं वर्तमान में विंडोज़ पर विनसिप का उपयोग कर रहा हूं, जो कि कुछ डिग्री के लिए पटकथा योग्य है लेकिन संभवतः स्क्रिप्ट योग्य नहीं हो सकता है। मुझे शायद किसी प्रकार का कोबल्ड-एक साथ समाधान की आवश्यकता होगी, इसलिए इसमें डक्ट टेप के साथ कुछ सुझाव देने से डरो मत; हालांकि, मुझे अपने स्थानीय कंप्यूटर पर खनन करने की आवश्यकता है और स्क्वॉइड फ़ाइल अपलोड करें, क्योंकि मैं साझा होस्टिंग का उपयोग करता हूं और सर्वर पर जंक इंस्टॉल नहीं कर सकता।अपलोड पर सीएसएस और जावास्क्रिप्ट को स्वचालित रूप से छोटा करें

धन्यवाद।

+3

Cygwin + SCP + खोल स्क्रिप्ट। –

+0

वैसे, एक उत्तर देने का जवाब दें क्योंकि यह गलत है जो आपको करना है। एक प्रश्न नीचे मतदान करना क्योंकि आप पोस्टर को नापसंद करते हैं, वह दुर्भावनापूर्ण और अनौपचारिक है। –

+0

मुझे लगता है कि जोन के जवाब पर आपकी टिप्पणी का स्वर और सीएपीएस का इस्तेमाल करने वाला तथ्य आपके प्रश्न को कम करने से ज्यादा दुर्भावनापूर्ण था। – redsquare

उत्तर

6

मैं इस विशेष समस्या को हल करने के लिए एक makefile बनाने का सुझाव देते यहाँ एक त्वरित और गंदे makefile मैं मेरा एक साइट के लिए उपयोग कर रहा हूँ है:

PUBDIR=../../static/js/ 
OUTDIR=./build/ 
COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar 
ARGS= 
VPATH=${OUTDIR} 
INST_TARGETS=${OUTDIR}jgblue.js 

jgblue.js: combined.js 
    java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}[email protected] 

combined.js: main.js listview.js tabs.js 
    cat $^ > ${OUTDIR}[email protected] 

.PHONY: install 

install: 
    cp ${INST_TARGETS} ${PUBDIR} 

तो आपके पास टाइप करने के लिए है:

make && make install 

सबसे पहले यह आपकी सभी विकास फ़ाइलों को लेता है और उन्हें एक फ़ाइल में जोड़ता है, तो समेकित फ़ाइल संपीड़ित हो जाती है और आपकी सार्वजनिक निर्देशिका में कॉपी हो जाती है। मैं संपीड़न के लिए YUICompressor का उपयोग कर रहा हूं, यह काफी अच्छी तरह से काम करता है।

+0

हॉट डॉग। सिगविन के साथ यह चारों ओर झुकाव लायक हो सकता है। –

+0

मैं जो कर रहा हूं (जब से मैं विंडोज़ पर हूं) एक पावरहेल स्क्रिप्ट लिख रहा है जो PSEventing स्नैप-इन के साथ परिवर्तनों के लिए निर्देशिका को देखता है, फिर फ़ाइल एक्सटेंशन के आधार पर उपयुक्त मिनीफायर के माध्यम से चलाता है। –

5

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

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

+0

प्रश्न पढ़ें। मैंने अपलोड पर ऐसा करने का एक तरीका पूछा। मुझे पता है कि क्या उपयोग करना है, मुझे बस यह जानने की जरूरत है कि इसे स्वचालित करने का कोई अच्छा तरीका है या नहीं। –

+0

मैंने आपका प्रश्न पढ़ा था। और मैंने आपको वह विकल्प दिया जो मैंने सबसे अच्छा विकल्प माना, क्योंकि मुझे नहीं लगता कि आपके पास अपलोड पर स्वचालित रूप से ऐसा करने का विकल्प है। – Sampson

+0

शायद किसी और को पता चलेगा। यही कारण है कि मैंने पहली जगह में पूछा। –

5

ठीक है, सीएसएस को कम करने के लिए केवल कुछ रेगेक्स हैं।

// (PHP) but should be easily portable to any language 
function compressCSS($css) { 
    return 
     preg_replace(
      array('@\s\[email protected]','@(\w+:)\s*([\w\s,#]+;?)@'), 
      array(' ','$1$2'), 
      str_replace(
       array("\r","\n","\t",' {','} ',';}'), 
       array('','','','{','}','}'), 
       preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css) 
      ) 
     ) 
    ; 
} 

और डीन एडवर्ड्स के जावास्क्रिप्ट पैकर PHP, Perl, .NET and WSH वापस पोर्ट दिया गया है, ताकि आप उन तकनीकों का उपयोग कर रहे हैं, तो आप वास्तव में यह अपने खुद के सर्वर पर चल रहा हो सकता था। ... बस परिणामों को कैश करना याद रखें!

+0

स्पष्ट रूप से ओपी हमें यह नहीं बता रहा है कि अपलोड पर स्वचालित रूप से इसे कैसे किया जाए।चूंकि मुझे लगता है कि आपने एक वैध समाधान की पेशकश की है, इसलिए मैं अपने डाउनवोट को अपवर्तित कर दूंगा। – Sampson

+3

मैं उन उत्तरों को कैसे कम करता हूं जो मेरे प्रश्न का उत्तर नहीं देते हैं! –

+11

@ जेरेट कभी-कभी हमारे प्रश्नों का सबसे अच्छा विकल्प के साथ उत्तर दिया जाता है। – Sampson

2

मुझे Minify पसंद है। यह फ्लाई पर एचटीएमएल, जावास्क्रिप्ट और सीएसएस को संपीड़ित और ट्रिम करने का समर्थन करता है।

यह काफी लचीला है, जिसे मौजूदा ऐप्स में एकीकृत किया जा सकता है।

कुछ उन्नत विशेषताएं सीएसएस के लिए एक ही में एकाधिक जावास्क्रिप्ट फ़ाइलों को जोड़ती हैं। इसमें परिभाषित करने के कई तरीके हैं कि कौन सी फाइलें गठबंधन करती हैं, जो परीक्षण उद्देश्यों के लिए उपयोगी है। इस तरह आपको हर बार सेटिंग्स को संशोधित करने की आवश्यकता नहीं है।

+0

यह अच्छा हो सकता है। मैं जिस समाधान के बारे में सोच रहा था उससे कहीं अधिक बेवकूफ प्रूफ लगता है। –

+0

यह वास्तव में मूर्ख है। मैंने और जानकारी जोड़ा। – Dykam

1

मैं आपकी विकास मशीन पर संपीड़न (कुछ स्वचालित तरीके से हर तरह से) का सुझाव देता हूं और अपने लाइव सर्वर पर अपलोड करने से पहले वहां परीक्षण करता हूं। अपनी तैनाती प्रक्रिया के अंतिम चरण के रूप में मूल रूप से अपनी जावास्क्रिप्ट को बदलना त्रुटियों को शुरू करने के लिए एक स्पष्ट जोखिम है।

+0

यही कारण है कि मैं इसे अपलोड पर स्वचालित रूप से छोटा करना चाहता हूं: इसलिए मैं हमेशा वास्तविक उत्पादन फ़ाइल के साथ परीक्षण कर रहा हूं। –

1

रेली ठंडा समाधान whice स्वचालित रूप से एक सपने की तरह जेएस और सीएसएस की सेवा करते हैं।

की जांच: http://code.google.com/p/minify/

सुविधाएँ

  • जोड़ती है और minifies कई सीएसएस या जावास्क्रिप्ट फ़ाइलें एक भी डाउनलोड
    • में सीएसएस कम करें को डगलस Crockford के JSMin पुस्तकालय और कस्टम कक्षाओं का एक उन्नत बंदरगाह का उपयोग करता है और एचटीएमएल
    • अनावश्यक काम करने से बचने के लिए कैश सर्वर-साइड (फ़ाइलें/एपीसी/memcache)
    • एक HTTP 304 (संशोधित नहीं) प्रतिक्रिया जब ब्राउज़र एक अप-टू-डेट संचय प्रति
    • अधिकांश मॉड्यूल की जरूरत के रूप में आलसी-लोड किए गए हैं (304 प्रतिक्रियाएं कम से कम कोड का उपयोग करें)
    • स्वचालित रूप में रिश्तेदार यूआरआई पुनर्लेखन है के साथ प्रतिक्रिया संयुक्त सीएसएस फाइलों को मान्य स्थानों पर इंगित करने के लिए
    • कैशिंग सक्षम होने के साथ, मिनीइफ़ एक मध्यम शक्तिशाली सर्वर पर प्रति सेकंड सैकड़ों अनुरोधों को संभालने में सक्षम है।
    • सामग्री-एन्कोडिंग: gzip, अनुरोध शीर्षलेखों के आधार पर। कैशिंग इसे अपाचे के mod_deflate विकल्प की तुलना में gzipped फ़ाइलों को तेज़ करने की अनुमति देता है!
    • सबसे घटकों के लिए टेस्ट मामलों
    • 3 तीय-पक्ष minifiers
    • HTTP एन्कोडिंग और कैश नियंत्रण enter code here
2

मैं सिर्फ अजगर में इस minfier पटकथा लिखी लिए अलग उपयोगिता वर्गों के आसान एकीकरण। बिल समाधान के समान, यह वाईयूआई कंप्रेसर का उपयोग करता है, लेकिन कम-कम वातावरण में काम करेगा। यह मानता है कि कच्ची (unminifie) फ़ाइलें/कुछ/पथ/src/में होंगी, और यह कि न्यूनतम संस्करण/कुछ/पथ/में जाना चाहिए। यह भी मानता है कि yuicompressor जार फ़ाइल वर्तमान फ़ोल्डर में है:

import os, glob 
from subprocess import Popen,PIPE 

def RunCommand(cmd, show_output ): 
    p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE) 
    for line in p.stdout: 
     if show_output: 
      print line 


    outerr = "\n".join(p.stderr.readlines()) 

    if len(outerr) > 0: 
     print "ERROR: " + outerr 
     sys.exit() 

    code = p.wait()   
    if (code > 0): 
     print ("ERROR CODE: %i" % code) 
     sys.exit() 



compresser = "yuicompressor-2.4.2.jar" 
dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"] 

extensions = ["*.js", "*.css" ] 

for dir in dirs: 
    src = dir + "/src/" 
    for ext in extensions:  
     for path in glob.glob(os.path.join(src, ext)): 
      file = os.path.basename(path) 
      src_file = os.path.normpath(src + "/" + file) 
      dest_file = os.path.normpath(dir + "/" + file) 
      if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file): 
       print "minifying %s..." % (dest_file) 
       command = "java -jar %s %s -o %s" % (compresser, src_file, dest_file) 
       RunCommand(command, True) 
0

दोनों (जे एस और सीएसएस) के लिए एक और भी हल्का समाधान है ताकि आप "मक्खी पर कम करें" कर सकते हैं। आपको किसी भी भाषा में आसानी से पोर्ट करने में सक्षम होना चाहिए (यह वर्तमान में PHP में है)। यह वास्तव में एक टुकड़ा और PHP फैट-फ्री फ्रेमवर्क का एक अभिन्न हिस्सा है। इस लिंक का पालन करें और मेरे कोड पर एक नज़र डालें। यह सिर्फ एक ही समारोह है। फाइलों, बेस-एक्स एन्कोडिंग, वैरिएबल को छोटा करने या यहां तक ​​कि जीजीआईपी-एन्कोडिंग (हालांकि इसे आसानी से जोड़ा जा सकता है) जैसी घंटी और सीटी की तलाश न करें।

Fat-Free Minify