Wykluczanie plików / katalogów z zadania Gulp

227

Mam zadanie gulp rjs, które łączy i uglifikuje wszystkie moje niestandardowe pliki .JS (dowolne biblioteki innych producentów).

To, co próbuję zrobić, to wykluczyć niektóre pliki / katalogi z tego zadania (kontrolery i dyrektywy).

Oto moje drzewo:

 - 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

Oto moje gulp.js

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
źródło
1
Czy próbowałeś zignorować gulp? npmjs.org/package/gulp-ignore
danbars
1
@ user1655734: dokumentacja gulp-ignore ( npmjs.com/package/gulp-ignore ) sugeruje gulp.src(['./*.js', '!./node_modules/**'])najpierw wykluczenie wzorca ( ), a następnie gulp-ignore
Jeromy French

Odpowiedzi:

526

Szybka odpowiedź

W src zawsze możesz określić pliki do zignorowania za pomocą „!”.

Przykład (chcesz wykluczyć wszystkie pliki * .min.js w folderze i podfolderze js:

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

Możesz to zrobić również dla pojedynczych plików.

Rozszerzona odpowiedź:

Wyciąg z dokumentacji łyka:

gulp.src (globs [, opcje])

Emituje pliki pasujące do podanego globu lub tablicy globów. Zwraca strumień plików winylowych, które można potokować do wtyczek.

glob odnosi się do składni node-glob lub może to być bezpośrednia ścieżka pliku.

Tak więc, patrząc na dokumentację węzłów- globów, widzimy, że używa biblioteki minimatch do dopasowania.

W dokumentacji minimatcha wskazują one:

jeśli wzór zaczyna się od! charakter, to jest negowane.

I dlatego używam! symbol wykluczy pliki / katalogi z zadania przełknięcia

avcajaraville
źródło
11
Nie należy tego unikać? To jest z dokumentacji węzła-globu: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.
Mister Oh
2
Musiałem użyć: gulp.src([/*file globs*/], {base:"."})aby wzorce globów działały poprawnie.
Scott
1
@avcajaraville Zgadzam się, że twoja odpowiedź jest całkowicie poprawna. Nie udało mi się sprawić, by opublikowana odpowiedź działała poprawnie bez odpowiedzi w moim komentarzu. Nie jestem pewien, jak to nie ma nic wspólnego z odpowiedzią / pytaniem, ale chciałem tylko opublikować, co dla mnie zadziałało.
Scott
1
@MisterOh faktycznie, gulp.src to winyl-fs.src, który przekazuje globowanie do glob-stream, który z kolei używa węzła glob do dodatnich globów i minimatch dla negatywnych globów, więc można używać wzorców ujemnych. Sprawdź dokumentację glob-stream i przykładowe pozytywne i negatywne wzorce globu tutaj lub spójrz na kod .
Codebling
18
Negacja to właściwy sposób, aby to zrobić. Dokumentacja przełknięcia była niepoprawna. Otworzyłem problem dotyczący dokumentów i przesłałem PR , który poprawił dokumentację .
Edward Brey
5

Gulp używa mikromacierzy pod maską do dopasowywania globów, więc jeśli chcesz wykluczyć dowolny plik .min.js, możesz to zrobić, korzystając z rozszerzonej funkcji globowania , takiej jak ta:

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

Zasadniczo mówi: chwyć wszystko na dowolnym poziomie js , który nie kończy się na * .min.js

Jair Reina
źródło