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.
Dziękuję, że był brakującym ogniwem. Jakoś chodziłem w kółko i zupełnie tę opcję przegapiłem. – Monokai