Saya mencoba menjalankan proyek dari direktori yang berfungsi ke server (mesin yang sama). Menggunakan kode berikut:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Saya berharap untuk melihat semua file disalin. Namun itu meratakan struktur dir - semua direktori disalin tetapi setiap file ditempatkan di root/var/www
Gulp sepertinya alat bantu yang bagus tetapi menyalin item seharusnya menjadi proses yang sederhana?
deployment
gulp
M1ke
sumber
sumber
/var/www/
? Anda bisa mencoba{css,js,src}/**/*
Jawaban:
Berikut ini berfungsi tanpa meratakan struktur folder:
Itu
'**/*'
adalah bagian yang penting. Ekspresi itu adalah gumpalan yang merupakan alat pemilihan file yang kuat. Misalnya, hanya untuk menyalin file .js gunakan:'input/folder/**/*.js'
sumber
.pipe(gulp.dest('output/folder'));
{base:"."}
metode ini.base
defaultnya adalah "folder" seperti yang diberikan dalam jawaban ini. Dengan kata lain, basis dimulai di mana pola gumpalan dimulai. Ini membantu saya untuk memahami di mana file saya akan berakhir dan juga mengapa Anda tidak perlu**/*
dalamgulp.dest
parameter. Gulp mengambil semua yang ada di glob dan meletakkannya di folder dest dengan struktur yang sama.Ternyata untuk menyalin struktur direktori yang lengkap
gulp
perlu disediakan basis untukgulp.src()
metode Anda .Jadi
gulp.src( [ files ], { "base" : "." })
dapat digunakan dalam struktur di atas untuk menyalin semua direktori secara rekursif.Jika, seperti saya, Anda mungkin lupa ini lalu coba:
sumber
base
masih membingungkan Anda, lihat stackoverflow.com/a/35848322/11912 yang berfungsi menjelaskannya dengan baik.Jadi - solusi menyediakan karya dasar mengingat bahwa semua jalur memiliki jalur dasar yang sama. Tetapi jika Anda ingin memberikan jalur dasar yang berbeda, ini masih tidak akan berhasil.
Salah satu cara saya memecahkan masalah ini adalah dengan membuat awal jalur relatif. Untuk kasus Anda:
Alasan ini berhasil adalah bahwa Gulp menetapkan basis menjadi akhir dari chunk eksplisit pertama - the * menyebabkannya untuk menetapkan basis pada cwd (yang merupakan hasil yang kita semua inginkan!)
Ini hanya berfungsi jika Anda dapat memastikan struktur folder Anda tidak akan memiliki jalur tertentu yang bisa cocok dua kali. Misalnya, jika Anda memiliki
randomjs/
level yang sama denganjs
, Anda akan berakhir dengan mencocokkan keduanya.Ini adalah satu-satunya cara yang saya temukan untuk memasukkan ini sebagai bagian dari fungsi gulp.src tingkat atas. Akan lebih mudah untuk membuat plugin / fungsi yang dapat memisahkan masing-masing gumpalan tersebut sehingga Anda dapat menentukan direktori dasar untuknya.
sumber
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, dan ini sebenarnya bagaimana saya menemukan pertanyaan Anda - saya sedang mencari solusi bagaimana menyalin secara rekursif dengan jalur dasar yang berbeda. Pada dasarnya, solusi ini berfungsi untuk kasing Anda tanpa harus menentukan basis default, tetapi juga untuk'assets/subdir/*fonts/*'
untuk menyalin dir font.Jika Anda ingin menyalin seluruh isi folder secara rekursif ke folder lain, Anda dapat menjalankan perintah windows berikut dari tegukan:
The
/y
pilihan pada akhirnya adalah untuk menekan pesan konfirmasi menimpa.Di Linux, Anda dapat menjalankan perintah berikut dari tegukan:
Anda dapat menggunakan plugin gulp-exec atau gulp-run untuk menjalankan perintah sistem dari gulp.
Tautan yang berhubungan:
penggunaan xcopy
tegukan-eksekutif dan tegukan-lari
sumber