Katakan, misalnya, Anda sedang membangun proyek di Backbone atau apa pun dan Anda perlu memuat skrip dalam urutan tertentu, misalnya underscore.js
harus dimuat sebelumnya backbone.js
.
Bagaimana cara saya membuatnya untuk skrip sehingga mereka dalam rangka?
// JS concat, strip debugging and minify
gulp.task('scripts', function() {
gulp.src(['./source/js/*.js', './source/js/**/*.js'])
.pipe(concat('script.js'))
.pipe(stripDebug())
.pipe(uglify())
.pipe(gulp.dest('./build/js/'));
});
Saya memiliki urutan skrip yang tepat dalam source/index.html
file saya , tetapi karena file disusun berdasarkan urutan alfabet, tegukan akan underscore.js
selesai setelahnya backbone.js
, dan urutan skrip pada saya source/index.html
tidak masalah, ia melihat file dalam direktori.
Jadi apakah ada yang punya ide tentang ini?
Ide terbaik yang saya miliki adalah untuk mengubah nama script penjual dengan 1
, 2
, 3
untuk memberi mereka urutan yang tepat, tapi saya tidak yakin apakah saya seperti ini.
Ketika saya belajar lebih banyak, saya menemukan Browserify adalah solusi yang hebat, pada awalnya bisa sangat menyebalkan, tetapi itu bagus.
sumber
require
di ujung depan karena tentu saja jika Anda telah menggunakan npm di sisi server Anda, Anda melihat bagaimana Anda dapat memerlukan modul, tetapi browserify memungkinkan Anda untuk melakukan itu pada kode sisi klien, tetap dalam pikiran untuk memulai itu memerlukan sedikit mengutak-atik, tapi itu terutama di dalam package.json dan jika Anda ingin menggunakan dengan gulp.js atau grunt.js. Jika Anda menginstal paket browserify gulp / grunt yang dapat Anda jalankangulp/grunt browserify
dan mengubah skrip Anda menjadi satu skrip utama, itu adalah kurva belajar yang sedikit tetapi layak untuk IMO.browserify
untukAngular
modul, di mana karya Rangkaian sederhana dan ketertiban tidak peduli :)Jawaban:
Saya memiliki masalah yang sama dengan Grunt saat membangun aplikasi AngularJS saya. Ini pertanyaan yang saya posting.
Apa yang akhirnya saya lakukan adalah secara eksplisit mendaftar file-file tersebut dalam konfigurasi kasar. File config kemudian akan terlihat seperti ini:
Grunt dapat mengetahui file mana yang merupakan duplikat dan tidak menyertakannya. Teknik yang sama akan bekerja dengan Gulp juga.
sumber
Hal lain yang membantu jika Anda memerlukan beberapa file untuk datang setelah gumpalan file, adalah mengecualikan file tertentu dari bola Anda, seperti:
Anda dapat menggabungkan ini dengan menentukan file yang harus didahulukan seperti yang dijelaskan dalam jawaban Chad Johnson.
sumber
src
dan sayabuild
saya melihat Anda menggunakan sintaks itu, saya akhirnya menghapus bagian itu karena saya tidak yakin persis mengapa saya membutuhkannya, masuk akal sekarang.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
) jika Anda sudah memasukkan file tertentu sebelumnya.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
Saya telah menggunakan plugin gulp-order tetapi tidak selalu berhasil seperti yang Anda lihat dengan stack overflow saya pasca modul node gulp-order dengan aliran gabungan . Ketika browsing melalui dokumen Gulp saya menemukan modul streamque yang telah bekerja dengan sangat baik untuk menentukan urutan dalam rangkaian kasus saya.https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Contoh bagaimana saya menggunakannya di bawah ini
sumber
Dengan gulp-useref, Anda dapat menggabungkan setiap skrip yang dideklarasikan dalam file indeks Anda, sesuai urutan Anda mendeklarasikannya.
https://www.npmjs.com/package/gulp-useref
Dan dalam HTML Anda harus mendeklarasikan nama file build yang ingin Anda hasilkan, seperti ini:
Di direktori build Anda, Anda akan memiliki referensi ke main.min.js yang akan berisi vendor.js, test.js, dan main.js
sumber
The semacam streaming juga dapat digunakan untuk memastikan urutan tertentu dari file dengan
gulp.src
. Kode contoh yang menempatkanbackbone.js
selalu sebagai file terakhir untuk diproses:sumber
Saya hanya menambahkan angka ke awal nama file:
Ini bekerja dalam tegukan tanpa masalah.
sumber
Saya mengatur skrip saya di folder yang berbeda untuk setiap paket yang saya tarik dari bower, ditambah skrip saya sendiri untuk aplikasi saya. Karena Anda akan membuat daftar urutan skrip-skrip ini di suatu tempat, mengapa tidak mencantumkannya dalam file tegukan Anda? Untuk pengembang baru di proyek Anda, senang bahwa semua titik akhir skrip Anda tercantum di sini. Anda dapat melakukan ini dengan gulp-add-src :
gulpfile.js
Catatan: jQuery dan Bootstrap ditambahkan untuk tujuan demonstrasi pesanan. Mungkin lebih baik menggunakan CDN untuk mereka karena CDN itu sudah sangat banyak digunakan dan browser sudah bisa di-cache dari situs lain.
sumber
Coba stream-series . Ia bekerja seperti merge-stream / event-stream.merge () kecuali bahwa alih-alih interleaving, ia menambahkan sampai akhir. Itu tidak mengharuskan Anda untuk menentukan mode objek seperti streamqueue , sehingga kode Anda keluar lebih bersih.
sumber
merge2 sepertinya satu-satunya alat penggabungan aliran yang dipesan dan dikelola saat ini.
Perbarui 2020
API selalu berubah, beberapa perpustakaan menjadi tidak dapat digunakan atau mengandung kerentanan, atau dependensinya mengandung kerentanan, yang tidak diperbaiki selama bertahun-tahun. Untuk manipulasi file teks, Anda sebaiknya menggunakan skrip NodeJS khusus dan pustaka populer seperti
globby
danfs-extra
bersama pustaka lainnya tanpa Gulp, Grunt, dll.sumber
Metode alternatif adalah dengan menggunakan plugin Gulp yang dibuat khusus untuk masalah ini. https://www.npmjs.com/package/gulp-ng-module-sort
Ini memungkinkan Anda untuk menyortir skrip Anda dengan menambahkan
.pipe(ngModuleSort())
seperti:Dengan asumsi konvensi direktori:
Semoga ini membantu!
sumber
Bagi saya, saya memiliki natualSort () dan angularFileSort () di pipa yang mengatur ulang file. Saya menghapusnya dan sekarang berfungsi dengan baik untuk saya
sumber
Saya hanya menggunakan gulp-angular-filesort
sumber
Saya berada di lingkungan modul di mana semua orang bergantung pada inti menggunakan tegukan. Jadi,
core
modul perlu ditambahkan sebelum yang lain.Apa yang saya lakukan:
src
foldergulp-rename
Andacore
_core
tegukan menjaga pesanan Anda
gulp.src
, konser sayasrc
terlihat seperti ini:Jelas akan mengambil
_
sebagai direktori pertama dari daftar (sort natural?).Catatan (angularjs): Saya kemudian menggunakan gulp-angular-extender untuk secara dinamis menambahkan modul ke
core
modul. Dikompilasi terlihat seperti ini:Di mana Admin dan Produk adalah dua modul.
sumber
jika Anda ingin memesan dependensi perpustakaan pihak ketiga, coba wiredep . Paket ini pada dasarnya memeriksa setiap ketergantungan paket di bower.json kemudian mengirimkannya untuk Anda.
sumber
Saya mencoba beberapa solusi dari halaman ini, tetapi tidak ada yang berhasil. Saya memiliki serangkaian file bernomor yang saya hanya ingin dipesan dengan namafabet alfabet sehingga ketika disalurkan ke
concat()
mereka akan berada dalam urutan yang sama. Artinya, pertahankan urutan input globbing. Mudah kan?Inilah kode bukti konsep khusus saya (
print
hanya untuk melihat urutan yang dicetak ke cli):Alasan kegilaannya
gulp.src
? Saya menentukan bahwagulp.src
menjalankan async ketika saya bisa menggunakansleep()
fungsi (menggunakan a.map
dengan sleeptime yang ditambahkan oleh indeks) untuk memesan output stream dengan benar.Hasil dari async dari
src
dirs rata - rata dengan lebih banyak file di dalamnya datang setelah dirs dengan lebih sedikit file, karena mereka butuh waktu lebih lama untuk diproses.sumber
Dalam pengaturan tegukan saya, saya menentukan file vendor terlebih dahulu dan kemudian menentukan (lebih umum) semuanya, kedua. Dan itu berhasil menempatkan vendor js di atas hal-hal khusus lainnya.
sumber
Tampaknya Anda dapat meneruskan opsi "nosort" ke gulp.src gulp.src .
sumber