2016-04-28 8 views
10

परिवर्तन नहीं किया पर विचार करें हम इस तरह एक webpack config है:webpack बंडल पुनर्निर्माण मत करो अगर प्रविष्टि फ़ाइलों

entry: { 
    app: './main.js', 
    lib: './vendor.js', 
} 

vendor.js फ़ाइल केवल एक गुच्छा के होते हैं node_modules से पुस्तकालयों के लिए की आवश्यकता है। 99% जब मैं बंडल का उत्पादन करता हूं तो आउटपुट lib.js बंडल बिल्कुल वही है।

मैं किसी भी तरह webpack बता सकते हैं कि अगर vendor.js फ़ाइल बदल दिया है (या अगर मैं संभवतः node_modules में मॉड्यूल के नए संस्करण है अधिमानतः lib.js और package.json का संशोधन दिनांक जाँच जैसे कुछ अन्य कस्टम हालत का पता लगाने के) मुझे क्या करना lib.js बंडल के पुनर्निर्माण के लिए नहीं चाहते हैं? टाइपस्क्रिप्ट ट्रांसप्लाइजेशन इत्यादि के कारण मेरे सीआई सर्वर पर काफी समय लगता है।

उत्तर

2

जहां तक ​​मुझे पता है कि वेबपैक केवल सचमुच जानता है कि एक फ़ाइल पहले ही इसे बनाने के बाद ही एक जैसी होगी क्योंकि कई कारक बदल सकते हैं फ़ाइल सामग्री। फ़ाइल की संशोधित तारीख वास्तव में यह निर्धारित करने के लिए पर्याप्त जानकारी प्रदान नहीं करती है कि इसे फिर से नहीं बनाया जाना चाहिए ताकि मैं इसके खिलाफ के खिलाफ सलाह दूंगा या आप शायद किसी बिंदु पर अपने निर्माण को तोड़ने और लोगों को उलझन में छोड़ देंगे।

हालांकि अगर आपको ऐसा करने की आवश्यकता महसूस होती है, तो अगर आप अपनी वेबपैक कॉन्फ़िगरेशन गतिशील बनाना चाहते हैं और fs.stat का उपयोग vendor.js पढ़ने के लिए करते हैं और फिर इसे बदलते ही इसे केवल एक प्रविष्टि के रूप में जोड़ें। मोटे तौर पर कुछ इस तरह:

var fs = require('fs'); 

var config = { 
    entry: { 
     app: './main.js' 
    } 
    ... 
}; 

var stats = fs.statSync('./vendor.js'); 
if (new Date(stats.mtime).getTime() > process.env.LAST_VENDOR_BUILD_TIMESTAMP) { 
    config.lib = './vendor.js'; 
    // Then save new Date().getTime() somewhere like a DB and 
    // pass it in as LAST_VENDOR_BUILD_TIMESTAMP on next build. 
} 

module.exports = config; 

आप देख सकते हैं अपनी समस्या को हल करने का एकमात्र तरीका है कि प्रत्येक और हर निर्माण पिछले के बारे में इस लक्ष्य को हासिल करने के लिए बनाता है ज्ञान है की जरूरत है। यह अवांछित है क्योंकि आपके निर्माण अलग-अलग होना चाहिए और पिछले निर्माण परिणामों की परवाह नहीं है।

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

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