Không bao gồm các tệp / thư mục từ nhiệm vụ Gulp


227

Tôi có một tác vụ gulp rjs kết hợp và làm xấu đi tất cả các tệp .JS tùy chỉnh của tôi (bất kỳ thư viện không phải nhà cung cấp nào).

Những gì tôi đang cố gắng làm, là loại trừ một số tệp / thư mục khỏi tác vụ này (bộ điều khiển và chỉ thị).

Đây là cây của tôi:

 - 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

Đây gulp.js của tôi

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());

});

1
Bạn đã thử gulp-bỏ qua? npmjs.org/package/gulp-ignore
danbars

1
@ user1655734: tài liệu bỏ qua gulp ( npmjs.com/package/gulp-ignore ) đề xuất mẫu loại trừ ( gulp.src(['./*.js', '!./node_modules/**'])) trước, sau đó bỏ qua gulp
Bỏ qua tiếng Pháp

Câu trả lời:


526

Câu trả lời nhanh

Trên src, bạn luôn có thể chỉ định các tệp để bỏ qua bằng cách sử dụng "!".

Ví dụ (bạn muốn loại trừ tất cả các tệp * .min.js trên thư mục js và thư mục con của bạn:

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

Bạn có thể làm điều đó là tốt cho các tập tin cá nhân.

Câu trả lời mở rộng:

Trích xuất từ ​​tài liệu gulp:

gulp.src (ảm đạm [, tùy chọn])

Phát ra các tệp phù hợp được cung cấp trên toàn cầu hoặc một mảng các khối. Trả về một luồng các tệp Vinyl có thể được dẫn đến các plugin.

toàn cầu đề cập đến global cú pháp nút-global hoặc nó có thể là một đường dẫn tệp trực tiếp.

Vì vậy, tìm kiếm tài liệu nút toàn cầu chúng ta có thể thấy rằng nó sử dụng thư viện minimatch để thực hiện khớp.

Trên tài liệu minimatch , họ chỉ ra những điều sau đây:

nếu mô hình bắt đầu bằng a! nhân vật, sau đó nó bị phủ nhận.

Và đó là lý do tại sao sử dụng! biểu tượng sẽ loại trừ các tập tin / thư mục từ một nhiệm vụ gulp


11
Không nên tránh điều này? Đây là từ tài liệu toàn cầu về nút: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
Tôi cần phải sử dụng: gulp.src([/*file globs*/], {base:"."})để các mô hình toàn cầu hoạt động chính xác.
Scott

1
@avcajaraville Tôi đồng ý rằng câu trả lời của bạn là hoàn toàn hợp lệ. Tôi đã không thể làm cho phản hồi được đăng hoạt động chính xác mà không có những gì tôi trả lời trong bình luận của mình. Không chắc làm thế nào mà không có gì để làm với câu trả lời / câu hỏi, nhưng chỉ muốn đăng những gì làm việc cho tôi.
Scott

1
@MisterOh trên thực tế, gulp.src là vinyl-fs.src, nó chuyển toàn cầu sang luồng toàn cầu, do đó sử dụng nút-global cho các khối dương và tối thiểu cho các khối âm, vì vậy sử dụng các mẫu âm. Kiểm tra tài liệu toàn cầu và lấy mẫu các mẫu toàn cầu dương và âm ở đây hoặc xem mã .
Codebling

18
Tiêu cực là cách đúng đắn để làm điều này. Các tài liệu gulp là không chính xác. Tôi đã mở một vấn đề liên quan đến các tài liệu và gửi PR đã sửa tài liệu .
Edward Brey

5

Gulp sử dụng micromatch dưới mui xe để phù hợp với các khối, vì vậy nếu bạn muốn loại trừ bất kỳ tệp .min.js nào, bạn có thể đạt được điều tương tự bằng cách sử dụng tính năng mở rộng như thế này:

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

Về cơ bản những gì nó nói là: lấy mọi thứ ở mọi cấp độ bên trong js không kết thúc bằng * .min.js

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.