Avevo anche bisogno di una cosa del genere, quindi ho compilato un plugin super semplice per eseguire i comandi di shell prima e dopo ogni build.
'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;
quindi nella configurazione webpack:
plugins: [
new WebpackShellPlugin({
onBuildStart: ['echo "hello world"'],
onBuildEnd: ['echo "goodbye world"']
})
]
Questo è super semplice, e non supportano gli script asincrone correttamente. ma funziona sentiti libero di modificare comunque come ritieni opportuno.
Considerare questo codice sotto licenza MIT.
Richiede il nodo 4.xe su per eseguire, poiché utilizzo alcune funzioni di es6 qui.
fonte
2016-02-11 11:01:10
Grazie, che era l'anello mancante. In qualche modo andavo in circolo e mi mancava completamente questa opzione. – Monokai