ไม่รวมไฟล์ / ไดเรกทอรีจากภารกิจอึก


227

ฉันมีงานอึก rjs ที่เชื่อมต่อและทำให้ไฟล์. JSS ที่กำหนดเองของฉัน (libraries ไม่ใช่ไลบรารีผู้จำหน่าย)

สิ่งที่ฉันพยายามทำคือแยกบางไฟล์ / ไดเรกทอรีออกจากงานนี้ (ตัวควบคุมและคำสั่ง)

นี่คือต้นไม้ของฉัน:

 - 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

นี่ 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());

});

1
คุณลองอึกอักแล้วหรือยัง? npmjs.org/package/gulp-ignore
danbars

1
@ user1655734: เอกสารgulp-ละเว้น ( npmjs.com/package/gulp-ignore ) แสดงรูปแบบที่แยก ( gulp.src(['./*.js', '!./node_modules/**'])) ก่อนจากนั้น gulp-ละเว้น
Jeromy French

คำตอบ:


526

คำตอบที่รวดเร็ว

บน src คุณสามารถระบุไฟล์ที่จะไม่สนใจโดยใช้ "!"

ตัวอย่าง (คุณต้องการยกเว้นไฟล์ * .min.js ทั้งหมดในโฟลเดอร์ js และโฟลเดอร์ย่อยของคุณ:

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

คุณสามารถทำได้เช่นกันสำหรับแต่ละไฟล์

ขยายคำตอบ:

สกัดจากเอกสารอึก:

gulp.src (globs [, options])

ปล่อยไฟล์ที่จับคู่ให้ glob หรืออาร์เรย์ของ globs ส่งคืนสตรีมของไฟล์ Vinyl ที่สามารถไพพ์ไปยังปลั๊กอิน

glob หมายถึงไวยากรณ์โหนด -globหรืออาจเป็นเส้นทางไฟล์โดยตรง

ดังนั้นเมื่อต้องการดูเอกสารโหนด -glob เราจะเห็นว่ามันใช้ห้องสมุด minimatch เพื่อทำการจับคู่

ในเอกสารย่อเล็กสุดพวกเขาชี้ให้เห็นต่อไปนี้:

ถ้ารูปแบบเริ่มต้นด้วย! ตัวละครแล้วมันก็เมื่อตะกี้

และนั่นคือเหตุผลที่ใช้! สัญลักษณ์จะแยกไฟล์ / ไดเรกทอรีออกจากงานอึก


11
ควรหลีกเลี่ยงสิ่งนี้หรือไม่? นี่คือจากเอกสาร 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.
นายโอ้

2
ฉันต้องการใช้: gulp.src([/*file globs*/], {base:"."})เพื่อให้รูปแบบกลมทำงานอย่างถูกต้อง
สกอตต์

1
@avcajaraville ฉันยอมรับว่าคำตอบของคุณถูกต้องทั้งหมด ฉันไม่สามารถให้การตอบสนองที่โพสต์ทำงานได้อย่างถูกต้องหากไม่มีสิ่งที่ฉันตอบในความคิดเห็นของฉัน ไม่แน่ใจว่ามันไม่มีส่วนเกี่ยวข้องกับคำตอบ / คำถาม แต่ต้องการโพสต์สิ่งที่เหมาะกับฉัน
สกอตต์

1
@MisterOh ที่จริงแล้ว gulp.src เป็น vinyl-fs.src ซึ่งส่งผ่านการกลิ้งไปที่ glob-stream ซึ่งในทางกลับกันจะใช้node-globสำหรับ globs เชิงบวกและminimatchสำหรับ globs เชิงลบดังนั้นคุณสามารถใช้รูปแบบเชิงลบได้ ตรวจสอบเอกสาร glob สตรีมและบวกตัวอย่างและรูปแบบการ glob เชิงลบที่นี่หรือมีลักษณะที่โค้ด
Codebling

18
การปฏิเสธเป็นวิธีที่เหมาะสมในการทำเช่นนี้ เอกสารอึกไม่ถูกต้อง ฉันเปิดปัญหาเกี่ยวกับเอกสารและส่งการประชาสัมพันธ์ที่แก้ไขเอกสารแล้ว
Edward Brey

5

อึกใช้ micromatch ภายใต้ประทุนเพื่อจับคู่ globs ดังนั้นหากคุณต้องการยกเว้นไฟล์. min.js ใด ๆ คุณสามารถทำสิ่งเดียวกันได้โดยใช้ฟีเจอร์ที่ขยายแบบนี้:

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

โดยพื้นฐานแล้วสิ่งที่กล่าวคือ: คว้าทุกสิ่งในทุกระดับภายในของjsที่ไม่ได้ลงท้ายด้วย* .min.js

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.