Próbuję przenieść projekt z katalogu roboczego na serwer (ten sam komputer). Używając poniższego kodu:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Spodziewałbym się, że wszystkie pliki zostaną skopiowane. Jednak spłaszcza strukturę katalogu - wszystkie katalogi są kopiowane, ale każdy plik jest umieszczany w katalogu głównym/var/www
Gulp wydaje się świetnym narzędziem do budowania, ale kopiowanie elementów z pewnością powinno być prostym procesem?
deployment
gulp
M1ke
źródło
źródło
/var/www/
? Możesz spróbować{css,js,src}/**/*
Odpowiedzi:
Poniższe działa bez spłaszczania struktury folderów:
To
'**/*'
jest ważna część. To wyrażenie to glob, który jest potężnym narzędziem do wybierania plików. Na przykład, aby skopiować tylko pliki .js, użyj:'input/folder/**/*.js'
źródło
.pipe(gulp.dest('output/folder'));
{base:"."}
metodą.base
domyślną nazwą jest „folder”, jak podano w tej odpowiedzi. Innymi słowy, podstawa zaczyna się tam, gdzie zaczyna się wzór globu. Pomogło mi to zrozumieć, gdzie skończą się moje pliki i dlatego nie potrzebujesz parametru**/*
w tymgulp.dest
parametrze. Gulp pobiera wszystko z globu i umieszcza w folderze dest o tej samej strukturze.Okazuje się, że aby skopiować kompletną strukturę katalogów,
gulp
trzeba mieć bazę dla swojejgulp.src()
metody.Więc
gulp.src( [ files ], { "base" : "." })
może być użyty w powyższej strukturze do rekurencyjnego kopiowania wszystkich katalogów.Jeśli tak jak ja możesz o tym zapomnieć, spróbuj:
źródło
base
nadal cię to dezorientuje, spójrz na stackoverflow.com/a/35848322/11912, który świetnie to wyjaśnia.A więc - rozwiązanie polegające na zapewnieniu bazy działa, biorąc pod uwagę, że wszystkie ścieżki mają tę samą ścieżkę podstawową. Ale jeśli chcesz zapewnić różne ścieżki podstawowe, to nadal nie zadziała.
Jednym ze sposobów rozwiązania tego problemu było zrobienie względnego początku ścieżki. W Twoim przypadku:
Powodem, dla którego to działa, jest to, że Gulp ustawia podstawę jako koniec pierwszego jawnego fragmentu - wiodący * powoduje, że ustawia podstawę na cwd (co jest wynikiem, którego wszyscy chcemy!)
Działa to tylko wtedy, gdy możesz upewnić się, że struktura folderów nie będzie miała pewnych ścieżek, które mogłyby pasować dwukrotnie. Na przykład, gdybyś miał
randomjs/
ten sam poziom cojs
, w końcu dopasowałbyś oba.To jedyny sposób, w jaki znalazłem, aby uwzględnić je jako część funkcji gulp.src najwyższego poziomu. Prawdopodobnie byłoby łatwo stworzyć wtyczkę / funkcję, która mogłaby oddzielić każdą z tych globów, abyś mógł jednak określić dla nich katalog podstawowy.
źródło
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, i tak właśnie znalazłem twoje pytanie - szukałem rozwiązania, jak kopiować rekurencyjnie z różnymi ścieżkami bazowymi. Zasadniczo to rozwiązanie działa dla twojego przypadku bez konieczności określania domyślnej podstawy, ale także dla przypadku ścieżki z wieloma bazami, o ile możesz upewnić się, że wiodąca gwiazda nic nie pasuje :)'assets/subdir/*fonts/*'
na skopiowaniu katalogu czcionek.Jeśli chcesz rekurencyjnie skopiować całą zawartość folderu do innego folderu, możesz wykonać następujące polecenie systemu Windows z gulp:
/y
Opcja na końcu jest do tłumienia nadpisywania wiadomość z potwierdzeniem.W Linuksie możesz wykonać następujące polecenie z gulp:
Możesz użyć wtyczki gulp-exec lub gulp-run do wykonywania poleceń systemowych z gulp.
Powiązane linki:
użycie xcopy
gulp-exec i gulp-run
źródło