Probabilmente sto provando a fare in modo che il gulp faccia qualcosa che non sia idiomatico, ma qui va. Voglio che la mia attività di compilazione venga eseguita solo se i file di origine sono più recenti del file di output.In Gulp, come faccio a eseguire un'attività su un solo file se uno dei file multipli è più recente?
In gulp, sembra prassi normale creare un'attività di compilazione che viene sempre eseguita e quindi impostare un'attività di controllo per eseguire solo l'attività di generazione quando alcuni file cambiano. Va bene, ma significa che tu hai sempre build alla prima esecuzione.
Quindi, è possibile fare ciò che voglio? Ecco quello che ho finora (più recente è gulp-più recente):
gulp.task('build_lib', function() {
return gulp.src(["app/**/*.ts"])
.pipe(newer("out/outputLib.js")) //are any of these files newer than the output?
** NEED SOMETHING HERE **
how do I say, "If I got _any_ files from the step before, replace all of them with a single hardcoded file "app/scripts/LibSource.ts" "?
.pipe(typescript({
declaration: true,
sourcemap: true,
emitError: false,
safe: true,
target: "ES5",
out: "outputLib.js"
}))
.pipe(gulp.dest('out/'))
});
Ho provato a utilizzare gulpif, ma non sembra funzionare se non ci sono file in cui iniziare.
.pipe(gulpif(are_there_any_files_at_all,
gulp.src(["app/scripts/LibSource.ts"])))
Tuttavia, la mia funzione condizione non è anche chiamato perché non ci sono i file su cui chiamarlo. gulpif chiama il flusso di verità in questo caso, quindi LibSource viene aggiunto al mio stream, che non è quello che voglio.
Forse fare tutto questo in un singolo stream non è la chiamata giusta, poiché l'unica ragione per cui sto passando quei file attraverso il filtro "gulp-newer" è vedere se qualcuno di questi è più recente. Quindi li scarto e li sostituisco con un altro file. La mia domanda è ancora valida.
Impressionante! Grazie! – Taytay