Biasanya dalam tugas Gulp terlihat seperti ini:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
Apakah mungkin untuk mengirimkan flag baris perintah ke tegukan (itu bukan tugas) dan menjalankannya berdasarkan persyaratan itu? Contohnya
$ gulp my-task -a 1
Dan kemudian di gulpfile.js saya:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
javascript
node.js
gulp
asolberg
sumber
sumber
process.argv
untuk mengakses argumen baris perintah.Jawaban:
Gulp tidak menawarkan utilitas apa pun untuk itu, tetapi Anda dapat menggunakan salah satu dari banyak parser perintah args. Saya suka
yargs
. Seharusnya:Anda juga dapat menggabungkannya dengan
gulp-if
untuk mengalirkan aliran secara kondisional, sangat berguna untuk pengembangan dev vs prod:Dan telepon dengan
gulp my-js-task
ataugulp my-js-task --production
.sumber
npm run gulp
maka Anda harus menggunakannya sepertinpm run gulp -- --production
.Edit
gulp-util
sudah usang dan harus dihindari, oleh karena itu disarankan untuk menggunakan minimalis , yanggulp-util
sudah digunakan.Jadi saya telah mengubah beberapa baris di gulpfile saya untuk menghapus
gulp-util
:Asli
Dalam proyek saya, saya menggunakan bendera berikut:
Gulp menawarkan objek
gulp.env
untuk itu. Ini sudah usang dalam versi yang lebih baru, jadi Anda harus menggunakan gulp-util untuk itu. Tugasnya terlihat seperti ini:Pengaturan lingkungan tersedia selama semua subtugas. Jadi saya bisa menggunakan bendera ini pada tugas jaga juga:
Dan tugas gaya saya juga berhasil.
Ciao Ralf
sumber
gulp.env
sedang tidak digunakan lagi , seperti yang Anda lihat pada pesan log konsol saat menjalankannya. Mereka meminta Anda untuk menggunakan parser Anda sendiri dan menyarankanyargs
atauminimist
.util.env.theme ? util.env.theme : 'main'
menjadiutil.env.theme || 'main'
. Pokoknya +1.gulp-util
menggunakanminimist
perpustakaan untuk parsing argumen baris perintah. Jadi jika Anda menggunakangulp-util
, Anda tidak perlu perpustakaan tambahan untuk tujuan itu. Dokumen: github.com/substack/minimistInilah resep cepat yang saya temukan:
gulpfile.js
CLI
Ref Asli (tidak tersedia lagi): https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
Alternatif dengan minimalis
Dari Ref Terkini: https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
sumber
Ada cara yang sangat sederhana untuk melakukan
on/off
flag tanpa menguraikan argumen.gulpfile.js
hanyalah sebuah file yang dieksekusi seperti yang lain, sehingga Anda dapat melakukannya:Dan gunakan sesuatu seperti
gulp-if
mengeksekusi langkah secara kondisionalEksekusi
gulp build
akan menghasilkan html yang bagus, sementaragulp production build
akan memperkecilnya.sumber
gulp.task('mytask', function() { if (flags.myflag ) { flaggedtask } else { unflaggedask } });
flags
.Jika Anda memiliki beberapa argumen ketat (dipesan!), Maka Anda bisa mendapatkannya hanya dengan memeriksa
process.argv
.Jalankan:
gulp --env production
... Namun, saya berpikir bahwa ini adalah tooo ketat dan tidak antipeluru! Jadi, saya mengutak-atik sedikit ... dan berakhir dengan fungsi utilitas ini:
Ini makan argumen-nama dan akan mencari di ini
process.argv
. Jika tidak ada yang ditemukan, ia dimuntahkannull
. Kalau tidak, jika tidak ada argumen berikutnya atau argumen berikutnya adalah perintah dan bukan nilai (kami berbeda dengan tanda hubung)true
akan dikembalikan. (Itu karena kuncinya ada, tetapi tidak ada nilai). Jika semua kasus sebelumnya akan gagal, nilai argumen berikutnya adalah apa yang kita dapatkan.> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
Oke, cukup untuk sekarang ... Ini contoh sederhana menggunakan tegukan :
Menjalankannya
gulp --env production
sumber
if (args[0] === '--env' && args[1] === 'production');
:, setidaknya dalam tegukan 3.8.11Saya membangun sebuah plugin untuk menyuntikkan parameter dari commandline ke dalam callback tugas.
https://github.com/stoeffel/gulp-param
Jika seseorang menemukan bug atau mengalami peningkatan, saya senang menggabungkan PR.
sumber
Dan jika Anda menggunakan naskah (
gulpfile.ts
) maka lakukan ini untukyargs
(membangun jawaban sempurna @Caio Cunha https://stackoverflow.com/a/23038290/1019307 dan komentar lainnya di atas):Install
.ts
fileTambahkan ini ke file .ts:
Ini harus dilakukan di setiap file .ts secara individual (bahkan
tools/tasks/project
file yang diimpor ke dalamgulpfile.ts/js
).Lari
Atau di bawah
npm
lulus arg hingga menelan:sumber
Lewati argumen dari baris perintah
Kemudian jalankan tegukan dengan:
Sumber
sumber
CLI
gulp production
memanggil tugas produksi saya dan menetapkan bendera untuk semua persyaratan.sumber
Kami ingin memberikan file konfigurasi yang berbeda untuk lingkungan yang berbeda - satu untuk produksi , pengembangan , dan pengujian . Ini adalah kode dalam file tegukan:
Ini adalah kode dalam file app.js:
Dan kemudian untuk menjalankannya tegukan
--env=testing
sumber
Sudah beberapa waktu sejak pertanyaan ini diposting, tetapi mungkin itu akan membantu seseorang.
Saya menggunakan GULP CLI 2.0.1 (diinstal secara global) dan GULP 4.0.0 (diinstal secara lokal) di sini adalah bagaimana Anda melakukannya tanpa plugin tambahan. Saya pikir kode ini cukup jelas.
Dan lari dari konsol:
Kemudian jalankan dan lihat perbedaannya:
sumber