2013-04-25 5 views
16

Durandal जेएस और एचटीएमएल फाइलों के संस्करण के लिए एक अच्छी रणनीति क्या है?डुरंडल कैशिंग अंक/संस्करण रणनीति

मैंने देखा कि, विकास के दौरान, प्रत्येक रीफ्रेश पर अद्यतित फ़ाइलों को प्राप्त करने के लिए आपके ब्राउज़र कैश को अक्षम किया जाना चाहिए। विकास के दौरान यह जरूरी है।

हालांकि, मेरी चिंता यह है कि जब मैं अपनी निरंतर तैनाती रणनीति (प्रति दिन कई बार तैनाती) के साथ उत्पादन में जाता हूं, तो उपयोगकर्ता के ब्राउज़र मेरे ऐप के पुराने संस्करणों को कैश करेंगे, जो अप्रत्याशित व्यवहार का कारण बन सकते हैं।

दृष्टिकोण जो स्प्रिंग्स दिमाग में है, वह किसी भी तरह से जेएस और एचटीएमएल यूआरएल संस्करण का संस्करण होगा ताकि प्रत्येक अनुरोध में एक संस्करण संख्या एम्बेडेड हो। लेकिन मैं अनिश्चित हूं कि इस काम को आंतरिक रूप से दुरंदल ढांचे के भीतर कैसे बनाया जाए।

उत्तर

27

ठीक है, यह वह दिशा है जिसमें मैं जा रहा हूं। मूल रूप से इसे संभालने के लिए आवश्यकताएं बनाई गई हैं।

मेरे main.js के शीर्ष पर, requirejs.config पर कॉल में मैं एक urlArgs प्रॉपर्टी सेट कर सकता हूं जो प्रत्येक कॉल आवश्यकता के लिए एक मॉड्यूल के लिए जोड़ा जाएगा।

requirejs.config({ 
    paths: { 
     'text': 'durandal/amd/text' 
    }, 
    urlArgs: 'v=1.0.0.0' 
}); 

जब मैं requirejs मॉड्यूल मैं सिर्फ संस्करण संख्या जो ब्राउज़रों कैश को अमान्य कर देंगे बढ़ाने के कर सकते हैं का एक नया संस्करण प्राप्त करने के लिए उत्पादन उपयोगकर्ताओं को बाध्य करना चाहते हैं।

(मेरी परियोजना में मेरे पास इस संपत्ति में मेरी मुख्य एएसपी.नेट एमवीसी असेंबली युक्त असेंबली के संस्करण संख्या को इंजेक्ट करने का एक तरीका है, लेकिन इसके लिए कोड उपरोक्त उदाहरण की सादगी से विचलित हो जाएगा)।

उम्मीद है कि यह किसी की मदद करेगा!

+1

बिल्कुल सही, समाधान के प्रकार की भी मुझे उम्मीद थी :) – GONeale

+0

यह मेरे लिए काम नहीं करता है, विचार/व्यूमोडल अभी भी पुराने संस्करण खींचते हैं। – ccorrin

+0

क्या विचारों और मॉडल से अनुरोध किए गए मॉडल को उनके यूआरएल में संस्करण संख्या जोड़ दी गई है? –

3

नेट के लिए, App_Start/BundleConfig में एक स्क्रिप्ट बंडल के रूप में मुख्य-built.js फ़ाइल जोड़ें:

public static void RegisterBundles(BundleCollection bundles) 
    { 
     //... 
     bundles.Add(new ScriptBundle("~/Scripts/main-built").Include(
       "~/App/main-built.js")); 
     //... 
    } 

संदर्भ अपनी अनुक्रमणिका पृष्ठ पर स्क्रिप्ट बंडल:

@if (HttpContext.Current.IsDebuggingEnabled) 
    { 
     <script type="text/javascript" src="~/Scripts/require.js" data-main="App/main"></script> 
    } 
    else 
    { 
     <!-- Remember to run the weyland optimizer to create the main-built.js --> 
     @Scripts.Render("~/Scripts/main-built") 
    } 

जब तक क्योंकि आपके पास डिफ़ॉल्ट वेब है। कृपया। फ़ाइल कॉन्फ़िगर करें, विजुअल स्टूडियो स्वचालित रूप से डिबग विशेषताओं को हटा देगा जबकि प्रकाशन पर आपके बंडलों को छोटा और संस्करणित करेगा।

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