Alla ricerca di un modo per copiare i file in gulp e rinominarli in base alla directory principale


91

Per ogni modulo ho alcuni file che devono essere copiati nella directory di build e sto cercando un modo per ridurre al minimo il codice ripetuto da questo:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

a qualcosa del genere:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

Ovviamente quanto sopra non funziona, quindi c'è un modo per farlo, o un npm che lo fa già?

Grazie

Risposte:


131

Il modo migliore è configurare il tuo basequando provi i file, in questo modo:

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

Questo dice gulp di usare la directory dei moduli come punto di partenza per determinare i percorsi relativi.

(Inoltre, puoi usare /**/*.jsse vuoi includere tutti i file JS ...)


6
Deve esserci un modo più dinamico per farlo - cosa succede quando i file src provengono da 2 directory diverse e si desidera conservare le loro directory in dest?
Ivan Durst

1
@IvanDurst Ho gestito questo caso specifico con il codice OP (risposta). utilizzando la configurazione di base e utilizzando il percorso relativo dal file gulp a file indipendenti e ./folder-example/**cartelle e file completi.
Caio Wilson

210

Non la risposta, ma applicabile all'aspetto di questa domanda nei risultati di ricerca.

Per copiare file / cartelle in gulp

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

2
Hmmm ... il mio gulp dice che questa attività è stata completata, ma il file di output non esiste.
Tyguy7

4
Devi restituire il flusso per far sapere a Gulp quando l'attività finisce.
Merott

2
Sono confuso perché una risposta che dice "non la risposta" ha più voti positivi rispetto alla risposta accettata che risponde alla domanda. Non sono sicuro che dovremmo ingombrare COSÌ con risposte progettate per far sì che i motori di ricerca facciano qualcosa in particolare invece di fornire risposte alla domanda. Penso che sia compito dei motori di ricerca creare qualcosa di utile con ciò che ottengono quando scansionano il sito. Solo i miei $ 0,02
jinglesthula

9
@jinglesthula È un servizio utile per chi arriva a questa domanda tramite i motori di ricerca, indipendentemente da quanto bene il motore di ricerca stia facendo il suo lavoro. Lo apprezzo.
jbkly

1
haha appena capito che è più popolare della domanda giusta o della risposta giusta: P
Kirk Strobeck,

5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

Ha funzionato per me!


.. anche ancora, questa è la risposta.
Kirk Strobeck

2
... così qualcuno può riscrivere esso in modo che non lavoro come è, così le persone che vengono a questa pagina alla ricerca di quel frammento di esatta del codice può effettivamente usarlo?
Ivan Durst

Quindi ... sono consentiti parent e $ n "backreferences" in src / dest globs? Non sono regex, afaik. Questo sembra quello che sto cercando, ma i documenti di vinyl-fs sono piuttosto concisi sulle opzioni .src () e .dest () e su cosa è consentito in essi e su come funzionano.
jinglesthula

3

L'uso per preservare l'albero della directory di input verrà preservato.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

Con questo, si può mettere nel src: .src(SRC_FOLDER + '/**/*.js').

Le altre risposte non hanno funzionato per me (come usare base:on src()}, perché alcuni plugin appiattiscono l'albero delle directory.


0

copiare i file in parallelo

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.