La mia domanda inizia con un altro, ha chiesto qui: Gulp: How to set dest folder relative to processed file (when using wildcards)?Spiegazione di percorsi di nodi rispetto al gulp .pipe()
Ho una situazione simile, in cui ho bisogno di fare versioni compresse in una base per modulo. Cioè, ho
ui/test/one/script1.js
ui/test/two/script2.js
e ho bisogno di avere sorso copiare i file nelle directory relative così finisco con
ui/test/one/compressed/script1.js
ui/test/two/compressed/script2.js
Ho la seguente attività sorso
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js')
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
Tuttavia , quando lo eseguo, finisco con
ui/test/one/compressed/one/script1.js
ui/test/two/compressed/two/script2.js
Vedo nel docs in cui si dice
CWD - Specificare la directory di lavoro la cartella è relativa a. base - Specifica la cartella relativa al cwd. L'impostazione predefinita è dove inizia il glob. Questo è usato per determinare i nomi di file da salvare in .dest()
Ho molte domande, in particolare su .src()
, .dest()
e il percorso e l'oggetti. (Cioè, sebbene sia Sono sicuro che ci sono altri modi per raggiungere il mio obiettivo finale, questa domanda riguarda specificamente il comportamento del codice gulp di esempio sopra e le funzioni menzionate in modo da comprendere meglio il loro comportamento e le API)
Domande
- Quando i documenti dicono che "la directory di lavoro la cartella è relativa a", quale cartella è questo?
- in quella stessa nota, in relazione a this comment e lo spot nei documenti dove si dice "base - Specificare la cartella relativa al cwd. L'impostazione predefinita è dove inizia il glob" che cosa significa "dove inizia il glob" significa? La mia comprensione di "glob" è che è l'intera stringa, ma in realtà significa un carattere * all'interno di quella stringa? Quindi per "alcuni/cartella/**/*. Js" con un file esistente a
some/folder/a/b/c/foo.js
non sono sicuro che la base siasome/folder/
,some/folder/a/
osome/folder/a/b/c/
? - c'è un modo per dire
<where the glob begins> + '..'
? - dove sto dicendo path.join (path.dirname (file.path), 'compresso') presumo che stia producendo
C:\blah\ui\test\one\compressed
. Ne consegue che qualunque cosa sia stata decisa, il nome effettivo del file ha in menteone\script1.js
. Come faccio a cambiare idea in modo che pensi solo ascript1.js
?
Nota: Ho provato a fare quanto segue (utilizzando gulp-debug)
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js', {cwd: './'})
.pipe(debug({minimal: false}))
.pipe(rename(function(path) {
path.basename = path.basename.substring(path.basename.lastIndexOf('\\') + 1);
}))
.pipe(debug({minimal: false}))
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
La console è il seguente output per questa versione del compito:
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
Così sembra che la rinomina non ha alcun effetto sul percorso. Ho anche provato a modificare il percorso.dirname nella pipe rename, ma non è riuscito a trovare nulla che avrebbe l'effetto desiderato di rimuovere semplicemente il nome della directory spuria dal percorso di output finale.
La mia ultima domanda, quindi, è cosa esattamente path.basename e path.dirname contengono per l'oggetto percorso passato alla funzione rename?
modifica: Ho trovato this su come eseguire il debug di attività gulp. In questo modo con un debugger;
dichiarazione collocato nella funzione di ridenominazione mi ha permesso di ispezionare l'oggetto tracciato, che assomiglia a questo:
{
basename: "script1",
dirname: "one",
extname: ".js"
}
Impostazione path.dirname per ''
nei risultati Rinomina
ui/test/compressed/script1.js
ui/test/compressed/script2.js
così potrebbe essere che rename() stesso non sia utile per ciò di cui ho bisogno. Sembra più che l'opzione di base di .src() possa essere dove si trova la chiave, ma i documenti sono piuttosto concisi.
Sembra che tu abbia trovato un modo per modificare il percorso nel modo in cui ti serve nell'ultimo '.pipe', quindi qual è la domanda? Perché gulp non consente uno scenario non standard fuori dalla scatola? –
@KirillSlatin Finisco con 'ui/test/one/compressed/one/script1.js' dove quello di cui ho bisogno è' ui/test/one/compresso/script1.js'. Quel secondo '/ one' è ciò che voglio evitare. Ho modificato questa ricetta https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-task-steps-per-folder.md ed è stata in grado di ottenere ciò di cui ho bisogno, quindi se la taglia scade e nessun altro si preoccupa di reclamarlo rispondendo, quindi pubblicherò una risposta con quello che ho trovato. Ho finito per usare un hash nel rinominare, che era proprio quello di cui avevo bisogno. – jinglesthula
Devo notare che il mio commento precedente è relativo al risultato finale e non alle domande effettive su .src() e .dest() e su come i percorsi di handle che stavo effettivamente chiedendo qui. Quindi, posterò quello che ho trovato sull'altra domanda che in realtà è la risposta a :) – jinglesthula