2012-02-07 14 views
14

कम्पास sprites प्रस्तुत करने के लिए chunky_png का उपयोग करता है। यह नई छवि sprites डाउनलोड करने के लिए कैश को मजबूर करने के लिए फ़ाइल के अंत में एक हैश जोड़ता है। क्या इस कैश को बंद करने का कोई तरीका है?कम्पास के उत्पन्न स्प्राइट छवि फ़ाइल नाम से हैश को कैसे हटाएं?

+0

स्प्राइट हैश ब्राउज़र कैश बस्टिंग के लिए नहीं है (हालांकि इसका प्रभाव है) लेकिन इसलिए कम्पास जेनरेट की गई फ़ाइल की पहचान कर सकता है। – sam

उत्तर

23

दुर्भाग्य asset_cache_buster :none विकल्प फ़ाइल नाम के अंत में हैश जोड़ने निष्क्रिय नहीं होती।

जैसा कि मैंने कुछ समय पहले (फ्रेंच में) लिखा था, कम्पास के पास कैश हैश बस्टर को अक्षम करने का कोई तरीका नहीं है, लेकिन मैं a solution का प्रस्ताव करता हूं।
अपने विन्यास फाइल में (जैसे config.rb) जोड़ने के निम्नलिखित लाइनों:

# Make a copy of sprites with a name that has no uniqueness of the hash. 
on_sprite_saved do |filename| 
    if File.exists?(filename) 
    FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, '.png') 
    end 
end 

# Replace in stylesheets generated references to sprites 
# by their counterparts without the hash uniqueness. 
on_stylesheet_saved do |filename| 
    if File.exists?(filename) 
    css = File.read filename 
    File.open(filename, 'w+') do |f| 
     f << css.gsub(%r{-s[a-z0-9]{10}\.png}, '.png') 
    end 
    end 
end 

अब, compass clean का उपयोग करता है उत्पन्न फ़ाइलों को हटाने के लिए और compass compile साथ एक संकलन पुन: प्रारंभ होता।
उदाहरण के लिए, आप images/icons-scb1e5456d5.png फ़ाइल औरimages/icons.png फ़ाइल प्राप्त करते हैं। स्टाइलशीट में, स्प्राइट्स के सभी संदर्भ अब हैश के बिना संस्करण को इंगित करते हैं।

कम्पास द्वारा संकलित समय अनुकूलित करने के लिए फ़ाइल को हैश प्रदान करना सुनिश्चित करें।

+0

इसके लिए धन्यवाद, मैंने व्यक्तिगत रूप से FileUtils के बजाय FileUtils.mv का उपयोग करना चुना है।सीपी ताकि होल्ड फ़ाइल – isNaN1247

+1

के आसपास लटका नहीं है, तो इसका उपयोग grunt-contrib-sass के साथ करना on_stylesheet_saved ब्लॉक को ट्रिगर नहीं करता है, जिससे सीएसएस पृष्ठभूमि गुणों को फ़ाइल को संदर्भित करने के बजाय हैश के साथ संदर्भित किया जाता है। ग्रंट-कॉन्ट्रिब-कंपास के साथ इसका उपयोग करने से यह ट्रिगर हुआ। – yuvilio

+1

@yuvilio यह हुक कम्पास द्वारा प्रदान किया जा रहा है और सास में मौजूद नहीं है। अनुस्मारक के लिए Thx! – piouPiouM

22

सेट asset_cache_buster :none अपने config.rb में के रूप में documented in their configuration reference

+1

इसे और अधिक अपवित्र की आवश्यकता है –

+3

स्वीकार्य उत्तर होना चाहिए। –

+4

यह समाधान हैस को फ़ाइल नाम को स्प्राइट करने के लिए हैश को पोस्टफ़िक्स के रूप में डालने से रोकता नहीं है, दिए गए प्रश्न में कोई समस्या क्या है। – s3m3n

1

मैं स्प्राइट के साथ परीक्षण नहीं किया है, लेकिन इस replace-text-with-dimensions साथ काम करता है, उदाहरण के लिए:

config.rb:

# disable asset cache buster 
asset_cache_buster do |http_path, real_path| 
    nil 
end 

The compass configuration file at caring.com

4

बेहतर समाधान पर मिले किसी अन्य रूप में पाया जा सकता है similar question

क्योंकि यह बेहतर है:

  1. स्क्रिप्ट पैदा स्प्राइट से पहले का नाम बदल कर - के बाद नहीं।
  2. बिंदु 1 के कारण .css ऑटो जेनरेट की गई फ़ाइल को शायद ही कभी बदलने की आवश्यकता नहीं है। यह शुरुआत से सही नाम के साथ उत्पन्न हुआ है।
  3. स्वीकृत समाधान हैश के साथ उत्पन्न स्प्राइट के cp (प्रतिलिपि) बनाता है और यह फ़ाइल सिस्टम/रेपो में डुप्लिकेट के रूप में रहता है जो काफी खराब है। इसके अतिरिक्त यह अभी भी स्थानीय रेपो के साथ बदला गया है ताकि आप दो समान फाइलें कर सकें। सॉल्यूशन mv को एक साफ़ करने के लिए जेनरेट हैश फ़ाइल नाम बदलने के लिए कर सकता है, लेकिन इस मामले में हर बार जब आप इसे .scss फ़ाइल में उपयोग करते हैं तो स्प्राइट उत्पन्न किया जाएगा, इसलिए यह भी बदतर है।
संबंधित मुद्दे