Usa gulp per selezionare e spostare le directory ei relativi file


98

Attualmente sto usando gulp per chiamare uno script bash che pulisce la mia dist/directory e sposta i file appropriati nella directory pulita. Vorrei che questo fosse fatto con gulp perché non sono sicuro che lo script funzionerebbe su un file system non * nix.
Finora, sto usando il modulo gulp-clean per pulire la dist/directory ma quando provo a spostare le directory richieste ei loro file nella cartella dist, le directory sono vuote.

var gulp = require('gulp'),
    clean = require('gulp-clean');

gulp.task('clean', function(){
  return gulp.src(['dist/*'], {read:false})
  .pipe(clean());
});

gulp.task('move',['clean'], function(){
  gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
  .pipe(gulp.dest('dist'));
});

gulp.task('dist', ['move']);

la chiamata gulp distrisulta nella dist/directory popolata con le directory corrette ma sono tutte vuote

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

Come copio le directory e il loro contenuto nella dist/cartella?

Risposte:


162

Devi includere l' baseopzione di src, che manterrà la struttura del file nel modo desiderato:

var filesToMove = [
        './_locales/**/*.*',
        './icons/**/*.*',
        './src/page_action/**/*.*',
        './manifest.json'
    ];

gulp.task('move',['clean'], function(){
  // the base option sets the relative root for the set of files,
  // preserving the folder structure
  gulp.src(filesToMove, { base: './' })
  .pipe(gulp.dest('dist'));
});

Inoltre, probabilmente avrai problemi lungo la strada se hai tutti questi file sorgente nella radice del tuo progetto.

Se puoi, ti consiglio di utilizzare una singola src/cartella e spostare tutti i file specifici dell'applicazione. Ciò semplifica l'avanzamento della manutenzione e impedisce che i file specifici della build vengano confusi con i file specifici dell'applicazione.

Se lo fai, sostituisci semplicemente tutte le occorrenze di ./con src/nell'esempio sopra.


1
Ha funzionato perfettamente solo dopo aver riorganizzato i file ma il tuo ragionamento è corretto, quindi contrassegno la tua risposta come corretta. Grazie.
Makenova

2
Per fare il contrario, usa gulp-flatten. stackoverflow.com/questions/21153338/…
Tony Gutierrez

2
Come nota per chiunque lo abbia fatto, assicurati di non avere l' readopzione in src impostata su false(è impostata su trueper impostazione predefinita).
yndolok

3
Quando lo faccio, sto copiando con tutte le directory di root.
Nomadme

5

La domanda originale si rivolge solo alle directory (ovvero alle cartelle) nelle sue gulp.src, ovvero gulp.src(['_locales', ...in questo esempio, _localesè il nome di una directory .

La risposta accettata utilizza un globmodello nel suo gulp.srcdi indirizzare i file ovunque in queste directory, vale a dire gulp.src(['./_locales/**/*.*', ..., (si noti i doppi asterischi , e le nomefile.estensione asterischi). La risposta accettata funziona ...

... ma la risposta accettata sottolinea solo l' baseopzione :

Devi includere l' baseopzione per src ...

Ho sperimentato e trovato:

  1. A rigor di termini, non è necessario utilizzare l' baseopzione per ottenere ciò che l'OP ha chiesto: "... e sposta i file appropriati nella directory pulita." L' baseopzione di non effettivamente preservare il file delle cartelle + struttura (come descritto nella risposta accettata), ma l' baseopzione è non è sufficiente per spostare i file come l'OP ha chiesto . Preservare la struttura cartella + file è probabilmente ciò che l'OP si aspetta , quindi la risposta accettata è buona, ma ...

  2. Solo per ribadire ciò che sposta i file, sono i globmodelli:

    1. Il doppio asterisco ( .../**/...) esegue la ricerca ricorsiva in tutte le sottocartelle e nelle sottocartelle 'sottocartelle', ecc.

    2. Filename.extension asterisks ( .../*.*) trova i file con tutti i nomi e tutte le estensioni . Quindi penso che questa parte meriti la massima enfasi!

  3. La risposta accettata cambia qualcos'altro; aggiunge un prefisso ./a ogni percorso a cui gli argomenti passati gulp.src. Penso che non sia necessario / ridondante; se non c'è ./, (come nella domanda OP), i percorsi sono risolti rispetto alla directory corrente - risultando nello stesso comportamento . Ma forse è una buona pratica essere espliciti con il./

Fammi sapere se mi sbaglio ...

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.