2011-05-12 12 views
11

मैं अपने वर्कफ़्लो को ढांचा बनाने का एक तरीका ढूंढ रहा हूं इसलिए मुझे "असम्पीडित" जेएस/सीएसएस फाइलों के साथ काम करते समय परेशानी/परेशानी नहीं होती है उत्पादन के लिए विकास और minified वाले।विकास और उत्पादन के लिए वर्कफ़्लो (गैर-) minified जेएस/सीएसएस फाइलों

मैं एक ही स्रोत के दो HTML संस्करण (विकास के साथ एक और एक मिनी जेएस/सीएसएस फाइलों के साथ) नहीं चाहता हूं। या मुझे करना है?

वास्तविक न्यूनतम प्रक्रिया को स्वचालित करने का सबसे अच्छा तरीका क्या है?

नोट: मैं एक स्थानीय समाधान की तलाश में हूं। सर्वर पक्ष एक विकल्प नहीं है।

+0

यह आपके सर्वर की तरफ तैनाती विधि में एक उपकरण बन जाएगा। एकीकरण उपकरण आपके सर्वर (PHP, .NET, ruby, आदि) पर निर्भर करता है – Raynos

+0

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

+0

मेरे मामले में सर्वर पक्ष एक विकल्प नहीं है। –

उत्तर

1

वर्तमान में सबसे अच्छा समाधान HTML5 boilerplate build script है।

सावधान रहें कि पूर्ण शक्ति का उपयोग करने में सक्षम होने से पहले एक सीखने की अवस्था है।

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

स्क्रिप्ट एचटीएमएल को भी संपीड़ित करता है और (वैकल्पिक रूप से) PHP सामान को छूता है।

HTML5 boilerplate build script शानदार है। यह खुला स्रोत है, कृपया योगदान दें!

नोट: मेरे अधिकांश इंफोस 3+ महीने पुराने हैं। मुझे नए विकास के बारे में बताएं।

0

आप यूआरएल के आधार पर उचित जेएस को गतिशील रूप से इंजेक्ट कर सकते हैं। संक्षेप में, आप यह देखने के लिए जांचते हैं कि यह उत्पादन यूआरएल है, और यदि इसमें न्यूनतम संस्करण शामिल है। फिर गैर-उत्पादन URL को संभालने और विकास संस्करण को इंजेक्ट करने के लिए किसी अन्य शाखा का उपयोग करें (इस तरह कोई आपके स्टेजिंग यूआरएल को नहीं देख सकता)।

1

मैं PHP में इस का उपयोग कर रहे हैं - आप प्रेरणा के लिए इसका इस्तेमाल करते हैं हो सकता है:

<? 
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192"; 

function caching_headers ($timestamp) { 
global $test_server;  
    if (!$test_server) { 
     $gmt_mtime = gmdate('r', $timestamp); 

     if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { 
      if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime) { 
       header('HTTP/1.1 304 Not Modified'); 
       exit(); 
      } 
     } 

     header('Last-Modified: '.$gmt_mtime);  
    } 
} 


header ("Content-Type: application/javascript; charset=utf-8"); 

include ($_SERVER['DOCUMENT_ROOT']."/media/js/jsmin.php"); 

$libs = explode("|",$_GET['libs']); 

$uniq_string = ""; 

foreach ($libs as $lib) { 
    $uniq_string .= filemtime($_SERVER['DOCUMENT_ROOT']."/media/js/$lib.js"); 
} 

$hash = md5($uniq_string); 

$cachefile = $_SERVER['DOCUMENT_ROOT']."/cache/".$hash.".js"; 

if(file_exists($cachefile)) { 
    $last_mod = filemtime($cachefile); 

    caching_headers ($last_mod); 
    include($cachefile); 
    echo "//Cached on ".gmdate('r', $last_mod)." to ".$hash; 
    exit; 
} else { 
    $combined = ""; 

    foreach ($libs as $lib) { 
     if (substr($lib, strlen($lib)-3, 3) == "min") { 
      $combined .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/media/js/$lib.js")."\n"; 
     } else { 
      $combined .= JSMin::minify(file_get_contents($_SERVER['DOCUMENT_ROOT']."/media/js/$lib.js"))."\n";   
     } 
    } 

    $fp = fopen($cachefile, 'w'); 
    fwrite($fp, $combined); 
    fclose($fp); 

    $last_mod = filemtime($cachefile); 

    caching_headers ($last_mod);  
    include($cachefile); 
    echo "//Cached on ".gmdate('r', $last_mod)." to ".$hash; 
} 

?> 

JSMin-php के साथ।

मैं तो का उपयोग करें:

<script src="/media/js/combined.php?libs=jquery-1.5.1.min|behaviour|jquery.form"></script> 
अपने पृष्ठों में

यह कैश की गई मिनीफ़ोन फ़ाइल को/कैश/पर संग्रहीत करता है, इसलिए सुनिश्चित करें कि यदि आप इसे आजमा रहे हैं तो फ़ोल्डर मौजूद है।

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