2012-11-28 24 views
10

मेरा मित्र डिजाइनर मैन्युअल रूप से अपनी कम फ़ाइल को संकलित कर रहा था और उसे कोडा (रिमोट साइट) के साथ अपलोड करने के लिए बहुत ही मूल्यवान समय व्यतीत कर रहा था। उसने मुझसे पूछा:सर्वर पर कम से कम सीएसएस में संकलित कैसे करें?

क्या लिनक्स सर्वर पर स्वचालित रूप से फ़ाइल परिवर्तन का पता लगाना संभव है और बिना देरी के संकलन करना संभव है?

+0

आप Drupal उपयोग कर रहे हैं, [कम] (https://drupal.org/project/less) मॉड्यूल स्वचालित रूप से आप के लिए किसी भी कम फ़ाइलों को प्रोसेस। – kenorb

उत्तर

10

मैं एक स्क्रिप्ट बना दिया है और मैं विवरण प्रकाशित:

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

- संपादन इस समाधान के साथ काम करेंगे

sudo apt-get install npm inotify-tools 
sudo npm install -g less 
sudo nano /usr/local/bin/lesscwatch 

फ़ाइल में निम्न पेस्ट करें:: सबसे पहले, आप "NPM" सर्वर पर कंसोल में इस टाइप करके स्थापित करने की आवश्यकता

#!/bin/bash 
# Detect changes in .less file and automatically compile into .css 
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; } 
inotifywait . -m -e close_write | while read x op f; do. 
    if [ "$f" == "$1" ]; then. 
     lessc $f > $2 && echo "`date`: COMPILED";. 
    fi 
done 

सहेजें, बाहर निकलें, तो निष्पादित करें:

sudo chmod +x /usr/local/bin/lesscwatch 

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

lesscwatch main.less main.css 

यह होगा सफल संकलन या त्रुटियों के बारे में आउटपुट जानकारी। का आनंद लें।

+1

मैंने उबंटू पर पाया, मुझे नोडजेस पैकेज स्थापित करना था, और नोड के बजाए निष्पादन योग्य के रूप में नोडजेज़ का उपयोग करने के लिए लोच स्क्रिप्ट (/ usr/local/bin/lessc) को संशोधित करना था। हां,/usr/local/bin/lessc की शीर्ष पंक्ति #!/Usr/bin/env nodejs में बदलें। मुझे यह समाधान पसंद है; इसे पोस्ट करने के लिए धन्यवाद! – Clark

+0

मैं अपने बैश पर नहीं हूं लेकिन मेरे सिस्टम में आपके स्वरूपण के साथ समस्याएं थीं। अगर मैंने लाइन डॉट्स के अंत को हटा दिया है और 'डू' और 'फिर' को अपनी लाइनों में ले जाया है (और अर्धविराम हटाएं), तो यह तैराकी से काम करता था। धन्यवाद! –

3

मैंने @ रोमानिनश के समाधान को संशोधित किया है ताकि निर्देशिका में किसी भी कम फाइल को बदल दिया जाए, जब यह फिर से संकलित हो जाए। मैंने कम फाइलों को संकलित करने से पहले एक गूंज कथन भी जोड़ा है, कुछ सत्यापन प्रदान करने के लिए कि संकलन कुछ सेकेंड लेने में परिवर्तन का पता चला है।

/usr/स्थानीय/bin/lesscwatch:

#!/bin/bash                  
# Detect changes in .less file and automatically compile into .css     
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; }     
inotifywait . -m -e close_write | while read x op f; do        
    if [[ "$f" == *".less" ]]; then             
     echo "Change detected. Recompiling...";          
     lessc $1 > $2 && echo "`date`: COMPILED";                               
    fi                    
done 

यह और अधिक बारीकी से है कि मैं करने के लिए इस्तेमाल कर रहा हूँ मैक के लिए Less.app के व्यवहार की नकल करता।

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

प्रयोग उदाहरण:

base.less:

@import "overrides.less"; 
@import "variables.less"; 

body { 
    ... 
} 

उपयोग एक ही है के रूप में

lesscwatch base.less base.css 
+0

यदि आप आउटपुट सीएसएस फ़ाइल को रिक्त स्थान वाले कुछ पथ में सहेजना चाहते हैं, तो लाइन 7 को 'कम करें $ 1> "$ 2" और echo "\' दिनांक \ ': COMPILED"; – jimmy

2

मैं bash स्क्रिप्ट चाहते हैं, लेकिन मैं कुछ इसे प्रयोग में समस्या आई sublime wthin ubuntu 12.10। अच्छी तरह से, स्क्रिप्ट्स एक ही Ian_Marcinkowski करता है, करता है लेकिन मुझे यकीन है कि यह पहली घटना के बाद काम करता रहता है, और सभी फ़ाइलों की निगरानी करता है (कुछ पाठ पाठ, किसी टीएमपी फ़ाइल का उपयोग करें, और मूल को बदलें -!?) ।

#!/bin/bash 
# Detect changes in .less file and automatically compile into .css 
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; } 
inotifywait -m -e close_write . | while read x op f; do 
    echo $f 
    echo "Change detected. Recompiling..."; 
    lessc $2 > $3 && echo "`date`: COMPILED"; 
done 

कॉल की तरह स्क्रिप्ट:

./monitor.sh </path/to/dir> <main.less> <main.css>