2015-05-18 9 views
15

मैं --watch मोड में webpack चलाना चाहते हैं, और प्रत्येक निर्माण कि एक और एक के लिए एक फ़ोल्डर सिंक्रनाइज़ करता है के बाद एक शेल कमांड चलाते हैं।भागो आदेश के बाद webpack निर्माण

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

उत्तर

2

आप आसानी के साथ किसी भी शेल कमांड चला सकते हैं में निर्मित child_process मॉड्यूल। इसके अलावा आप node.js के लिए कुछ खोल पुस्तकालयों को आजमा सकते हैं, जैसे Shell.js। यह और अधिक सुविधाजनक उपयोग

+0

धन्यवाद, कि लापता लिंक था। मैं किसी भी तरह सर्कल में जा रहा था और पूरी तरह से इस विकल्प को याद किया। – Monokai

45

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

'use strict'; 

var exec = require('child_process').exec; 

function puts(error, stdout, stderr) { 
    console.log(stdout); 
} 

function WebpackShellPlugin(options) { 
    var defaultOptions = { 
    onBuildStart: [], 
    onBuildEnd: [] 
    }; 

    this.options = Object.assign(defaultOptions, options); 
} 

WebpackShellPlugin.prototype.apply = function(compiler) { 
    const options = this.options; 

    compiler.plugin("compilation", compilation => { 
    if(options.onBuildStart.length){ 
     console.log("Executing pre-build scripts"); 
     options.onBuildStart.forEach(script => exec(script, puts)); 
    } 
    }); 

    compiler.plugin("emit", (compilation, callback) => { 
    if(options.onBuildEnd.length){ 
     console.log("Executing post-build scripts"); 
     options.onBuildEnd.forEach(script => exec(script, puts)); 
    } 
    callback(); 
    }); 
}; 

module.exports = WebpackShellPlugin; 
फिर अपने webpack config में

:

plugins: [ 
    new WebpackShellPlugin({ 
     onBuildStart: ['echo "hello world"'], 
     onBuildEnd: ['echo "goodbye world"'] 
    }) 
] 

इस सुपर बुनियादी है और ठीक से async स्क्रिप्ट का समर्थन नहीं करते। लेकिन यह काम करता है। संशोधित करने के लिए स्वतंत्र महसूस करें हालांकि आप फिट देखते हैं।

MIT लाइसेंस के तहत इस कोड पर विचार करें।

नोड 4.x और चलाने के लिए आवश्यक है, क्योंकि मैं यहां कुछ es6 सुविधाओं का उपयोग करता हूं।

+7

यदि आपको बंडल फ़ाइलों तक पहुंचने की आवश्यकता है तो 'आफ-एमिट' का उपयोग करना बेहतर होगा, क्योंकि वेबपैक फ़ाइलों को उत्सर्जित करना शुरू करते समय 'emit' ट्रिगर होता है। –

+0

क्या आप एक गैर ई 6 संस्करण बना सकते हैं? वहाँ –

+1

तुम जाओ: https://jsfiddle.net/0s4d4f8e/2/ –

0

आप GuyA जब एक विशिष्ट फ़ाइल आप इस छोटे प्लगइन मैं बनाया का उपयोग कर सकते बदल जाती है यह करने के लिए करना चाहते हैं: https://www.npmjs.com/package/webpack-noodle-plugin

आशा है कि यह मदद कर सकते हैं

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