Tidak termasuk file / direktori dari tugas Gulp

227

Saya memiliki tugas teguk yang menggabungkan dan menghapus semua file .JS kustom saya (sembarang perpustakaan non-vendor).

Apa yang saya coba lakukan, adalah mengecualikan beberapa file / direktori dari tugas ini (pengontrol dan arahan).

Inilah pohon saya:

 - application
    - resources
      - js
        main.js
        - vendor
            - jquery
            - modernzr
            - angular
        - controllers
            - controller1
            - controller2
            - controller3
        - directives
            - directives1
            - directives2
            - directives3
        - widgets
            - widget1
            - widget2
            - widget3
            - widget4
        - modules
            - modules1
            - modules2
            - modules3
            - modules4

Ini tegukku

dir = {
    app:        'application',
    dest:       'dest',
};

config = {
    src: {
        js: dir.app + '/resources/js'
    },
    dest: {
        js: dir.dest + '/resources/js'
    }
};

gulp.task('rjs', function() {

      rjs({
            baseUrl: config.src.js,
            out: 'main.js',
            name: 'main',
            mainConfigFile: config.src.js + '/main.js',
            exclude: [ 'jquery', 'angular']         
        })
        .pipe(prod ? uglify({ mangle: false, outSourceMap: true, compress: { drop_console: true } }) : gutil.noop())
        .pipe(gulp.dest(config.dest.js))
        .pipe(filesize())
        .pipe(dev ? connect.reload() : gutil.noop());

});
Oam Psy
sumber
1
Sudahkah Anda mencoba menelan? npmjs.org/package/gulp-ignore
danbars
1
@ user1655734: dokumentasi tegukan-abaikan ( npmjs.com/package/gulp-ignore ) menyarankan pola kecualikan ( gulp.src(['./*.js', '!./node_modules/**'])) pertama, kemudian teguk abaikan
Jeromy French

Jawaban:

526

Jawaban cepat

Di src, Anda selalu dapat menentukan file untuk diabaikan menggunakan "!".

Contoh (Anda ingin mengecualikan semua file * .min.js pada folder dan subfolder Anda:

gulp.src(['js/**/*.js', '!js/**/*.min.js'])

Anda dapat melakukannya juga untuk file individual.

Jawaban yang diperluas:

Diambil dari dokumentasi tegukan:

gulp.src (gumpalan [, opsi])

Memancarkan file yang cocok dengan glob atau sederetan gumpalan yang disediakan. Mengembalikan aliran file Vinyl yang dapat disalurkan ke plugin.

glob mengacu pada sintaks node-glob atau bisa juga berupa jalur file langsung.

Jadi, melihat ke dokumentasi node-glob kita dapat melihat bahwa ia menggunakan perpustakaan minimatch untuk melakukan pencocokan.

Pada dokumentasi minimatch , mereka menunjukkan hal berikut:

jika polanya dimulai dengan! karakter, maka dinegasikan.

Dan itulah mengapa menggunakan! simbol akan mengecualikan file / direktori dari tugas tegukan

avcajaraville
sumber
11
Bukankah ini harus dihindari? Ini dari dokumentasi node-glob:Negation The intent for negation would be for a pattern starting with ! to match everything that doesn't match the supplied pattern. However, the implementation is weird, and for the time being, this should be avoided. The behavior is deprecated in version 5, and will be removed entirely in version 6.
Tuan Oh
2
Saya perlu menggunakan: gulp.src([/*file globs*/], {base:"."})agar pola glob bekerja dengan benar.
Scott
1
@avcajaraville Saya setuju bahwa jawaban Anda benar-benar valid. Saya tidak dapat membuat respons yang diposting berfungsi dengan benar tanpa apa yang saya balas dalam komentar saya. Tidak yakin bagaimana itu tidak ada hubungannya dengan jawaban / pertanyaan, tetapi hanya ingin memposting apa yang berhasil untuk saya.
Scott
1
@MisterOh sebenarnya, gulp.src adalah vinyl-fs.src, yang meneruskan globbing ke glob-stream, yang pada gilirannya menggunakan node-glob untuk gumpalan positif dan minimatch untuk gumpalan negatif, jadi tidak apa-apa untuk menggunakan pola negatif. Lihat dokumentasi glob-stream dan cicipi pola glob positif dan negatif di sini , atau lihat kodenya .
Codebling
18
Negasi adalah cara yang tepat untuk melakukan ini. Dokumentasi tegukan salah. Saya membuka masalah tentang dokumen dan menyerahkan PR yang telah memperbaiki dokumentasi .
Edward Brey
5

Gulp menggunakan micromatch di bawah tenda untuk mencocokkan gumpalan, jadi jika Anda ingin mengecualikan salah satu file .min.js, Anda dapat mencapai hal yang sama dengan menggunakan fitur globbing yang diperluas seperti ini:

src("'js/**/!(*.min).js")

Pada dasarnya apa yang dikatakannya adalah: ambil segala sesuatu di setiap level di dalam js yang tidak berakhir dengan * .min.js

Jair Reina
sumber