2015-05-18 12 views
15

Chciałbym uruchomić pakiet sieci Web w trybie --watch i uruchomić polecenie powłoki po każdym kompilacji synchronizującej folder z innym.Polecenie uruchamiania po kompilacji pakietu WWW

Znalazłem this plugin, który uruchamia zdarzenie po każdym kompilacji. To działa, ale ostatnim elementem układanki jest wywołanie polecenia powłoki (do synchronizacji) z Javascript. Wszelkie wskazówki na temat tego, jak to osiągnąć, są bardzo doceniane.

Odpowiedz

2

Możesz łatwo uruchomić dowolne polecenie powłoki za pomocą wbudowanego modułu child_process. Możesz także wypróbować niektóre biblioteki powłoki dla pliku node.js, na przykład Shell.js. Zawijanie większości domyślnej powłoki dla wygodniejszego użycia

+0

Dziękuję, że był brakującym ogniwem. Jakoś chodziłem w kółko i zupełnie tę opcję przegapiłem. – Monokai

45

Też potrzebowałem czegoś takiego, więc skompilowałem super prostą wtyczkę do wykonywania poleceń powłoki przed i po każdej kompilacji.

'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; 

następnie w WebPACK config:

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

Jest to bardzo proste, i nie obsługują skryptów async prawidłowo. ale działa. możesz dowolnie modyfikować, jak uważasz za stosowne.

Należy uwzględnić ten kod na licencji MIT.

Wymaga węzła 4.x i do uruchomienia, ponieważ używam tutaj niektórych funkcji es6.

+7

Jeśli potrzebujesz dostępu do plików pakietu, lepiej użyć 'after-emitenta', ponieważ' emit' jest wyzwalane, gdy Webpack zaczyna emitować pliki. –

+0

można utworzyć wersję inną niż e6? –

+1

proszę: https://jsfiddle.net/0s4d4f8e/2/ –

Powiązane problemy