ด้วยรูปแบบไฟล์เดียว
(เช่น: * .coffee เท่านั้น)
หากคุณต้องการทำงานกับไฟล์เพียงรูปแบบเดียวgulp-plumber
นั่นคือทางออกของคุณ
ตัวอย่างเช่นข้อผิดพลาดที่จัดการอย่างสมบูรณ์และคำเตือนสำหรับการบันทึกกาแฟ:
gulp.task('scripts', function() {
return gulp.src(['assets/scripts/**/*.coffee'])
.pipe(plumber())
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(lintThreshold(10, 0, lintThresholdHandler))
.pipe(coffee({
bare: true
}))
.on('error', swallowError)
.pipe(concat('application.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'))
.pipe(notify({ message: 'Scripts task complete' }));
});
ด้วยรูปแบบไฟล์หลายประเภท
(เช่น: * .coffee และ * .js ในเวลาเดียวกัน)
แต่ถ้าคุณจะไม่ทำงานกับรูปแบบไฟล์หลายประเภท (เช่น: *.js
และ*.coffee
) กว่าที่ฉันจะโพสต์โซลูชันของฉัน
ฉันจะโพสต์โค้ดอธิบายตนเองที่นี่พร้อมคำอธิบายก่อนหน้านี้
gulp.task('scripts', function() {
// plumber don't fetch errors inside gulpif(.., coffee(...)) while in watch process
return gulp.src(['assets/scripts/**/*.js', 'assets/scripts/**/*.coffee'])
.pipe(plumber())
.pipe(gulpif(/[.]coffee$/, coffeelint()))
.pipe(coffeelint.reporter())
.pipe(lintThreshold(10, 0, lintThresholdHandler))
.pipe(gulpif(/[.]coffee$/, coffee({ // if some error occurs on this step, plumber won't catch it
bare: true
})))
.on('error', swallowError)
.pipe(concat('application.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'))
.pipe(notify({ message: 'Scripts task complete' }));
});
ฉันประสบปัญหากับgulp-plumber
และgulp-if
ใช้gulp.watch(...
ดูปัญหาที่เกี่ยวข้องได้ที่นี่: https://github.com/floatdrop/gulp-plumber/issues/23
ดังนั้นตัวเลือกที่ดีที่สุดสำหรับฉันคือ:
- แต่ละส่วนเป็นไฟล์และต่อกันหลังจากนั้น สร้างงานหลายอย่างที่สามารถประมวลผลแต่ละส่วนในไฟล์แยกกัน (เช่นทำเสียงฮึดฮัด) และเชื่อมต่อพวกเขา
- แต่ละส่วนเป็นสตรีมและรวมสตรีมหลังจากนั้น รวมสองสตรีมโดยใช้
merge-stream
(ที่ทำจากevent-stream
) เป็นหนึ่งและดำเนินงานต่อ (ฉันลองใช้ครั้งแรกและทำงานได้ดีสำหรับฉันดังนั้นจึงเป็นโซลูชันที่เร็วกว่ารุ่นก่อนหน้า)
แต่ละส่วนเป็นสตรีมและรวมสตรีมหลังจากนั้น
เธอเป็นส่วนหลักของรหัสของฉัน:
gulp.task('scripts', function() {
coffeed = gulp.src(['assets/scripts/**/*.coffee'])
.pipe(plumber())
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(lintThreshold(10, 0, lintThresholdHandler))
.pipe(coffee({
bare: true
}))
.on('error', swallowError);
jsfiles = gulp.src(['assets/scripts/**/*.js']);
return merge([jsfiles, coffeed])
.pipe(concat('application.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'))
.pipe(notify({ message: 'Scripts task complete' }));
});
แต่ละส่วนเป็นไฟล์และต่อกันหลังจากนั้น
หากจะแยกสิ่งนี้ออกเป็นส่วน ๆ ในแต่ละส่วนควรมีไฟล์ผลลัพธ์ที่สร้างขึ้น ตัวอย่างเช่น:
gulp.task('scripts-coffee', function() {
return gulp.src(['assets/scripts/**/*.coffee'])
.pipe(plumber())
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(lintThreshold(10, 0, lintThresholdHandler))
.pipe(coffee({
bare: true
}))
.on('error', swallowError)
.pipe(concat('application-coffee.js'))
.pipe(gulp.dest('dist/scripts'));
});
gulp.task('scripts-js', function() {
return gulp.src(['assets/scripts/**/*.js'])
.pipe(concat('application-coffee.js'))
.pipe(gulp.dest('dist/scripts'));
});
gulp.task('scripts', ['scripts-js', 'scripts-coffee'], function() {
var re = gulp.src([
'dist/scripts/application-js.js', 'dist/scripts/application-coffee.js'
])
.pipe(concat('application.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'))
.pipe(notify({ message: 'Scripts task complete' }));
del(['dist/scripts/application-js.js', 'dist/scripts/application-coffee.js']);
return re;
});
PS:
นี่คือโมดูลและฟังก์ชันของโหนดที่ใช้:
// Load plugins
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
plumber = require('gulp-plumber'),
merge = require('ordered-merge-stream'),
replace = require('gulp-replace'),
del = require('del'),
gulpif = require('gulp-if'),
gulputil = require('gulp-util'),
coffee = require('gulp-coffee'),
coffeelint = require('gulp-coffeelint),
lintThreshold = require('gulp-coffeelint-threshold');
var lintThresholdHandler = function(numberOfWarnings, numberOfErrors) {
var msg;
gulputil.beep();
msg = 'CoffeeLint failure; see above. Warning count: ';
msg += numberOfWarnings;
msg += '. Error count: ' + numberOfErrors + '.';
gulputil.log(msg);
};
var swallowError = function(err) {
gulputil.log(err.toString());
this.emit('end');
};