Gulp.js 在 LESS 文件出现错误后停止编译 LESS
Gulp.js stops compiling LESS when watched after there has been an error in the LESS files
我遇到了 gulp
的问题。我 运行 gulp-watch
以及 gulp-less
和 gulp-clean
。一切都运行宁完美。
当我编辑 somefile.less
并保存它时缺少分号,或者我可能不小心留下了尾随 ;s
,保存时我的代码出现错误,gulp-less
在控制台中记录错误。在我修复它后 gulp-watch
继续观察文件,但是 gulp-less
没有触发也没有编译。当我在终端再次停止 gulp
和 运行 时,一切恢复正常。
这是我的 gulpfile.js
:
var gulp = require('gulp');
var clean = require('gulp-clean');
var gutil = require('gulp-util');
var less = require('gulp-less');
var watch = require('gulp-watch');
var path = require('path');
gulp.task('clean', function() {
return gulp.src('src/main/webapp/styles/build', {read: false})
.pipe(clean().on('error', gutil.log))
});
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', gutil.log);
});
gulp.task('watch', function() {
watch('src/main/webapp/styles/**/*.{less, css}', function() {
gulp.start('less')
.on('error', gutil.log);
})
});
gulp.task('default', ['clean'], function() {
gulp.start(['less', 'watch'])
.on('error', gutil.log);
});
这是我的 devDependencies
:
"devDependencies": {
"gulp": "^3.8.10",
"gulp-clean": "^0.3.1",
"gulp-less": "^2.0.1",
"gulp-util": "^3.0.2",
"gulp-watch": "^3.0.0"
}
最后,这是控制台中的消息:
[10:21:03] imports/productSearchPage.less was changed
[10:21:03] Starting 'less'...
[10:21:03] { [Error: Unrecognised input. Possibly missing something in file /src/main/webapp/styles/imports/productSearchPage.less line no. 1008]
type: 'Parse',
filename: '/src/main/webapp/styles/imports/productSearchPage.less',
index: 19127,
line: 1008,
callLine: NaN,
callExtract: undefined,
column: 0,
extract: [ '', '', undefined ],
message: 'Unrecognised input. Possibly missing something in file /src/main/webapp/styles/imports/productSearchPage.less line no. 1008',
stack: undefined,
lineNumber: 1008,
fileName: '/src/main/webapp/styles/imports/productSearchPage.less',
name: 'Error',
showStack: false,
showProperties: true,
plugin: 'gulp-less',
__safety: { toString: [Function] } }
[10:21:04] imports/productSearchPage.less was changed
[10:21:08] imports/productSearchPage.less was changed
^C
能否请您告诉我 gulp-watch
任务有什么问题,并帮助我在消除错误后 运行 gulp-less
完成它,而无需重新启动 gulp
.
编辑:
我编辑的 gulp-less
任务
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', function(err) {
gutil.log(err);
this.emit('end');
});
});
我刚刚为我自己的个人项目设置了这个。根据 Gulp docs,你可以只使用 gulp.watch
:
gulp.task('watch', function() {
gulp.watch('src/main/webapp/styles/**/*.{less, css}', ['less'])
.on('error', gutil.log);
});
编辑:如果这没有帮助,请将您的 less
任务更改为:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less())
.on('error', function (err) {
gutil.log(err);
this.emit('end');
})
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', gutil.log);
});
改编自this comment。
我总是使用 gulp-plumber 来捕获错误。工作起来非常容易,并将错误记录到控制台。
示例:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(plumber())
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', function(err) {
gutil.log(err);
this.emit('end');
});
});
现在可以用了!这是我的最终工作 gulp-less
任务:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', function(err){
gutil.log(err);
this.emit('end');
}))
.pipe(gulp.dest('src/main/webapp/styles/build'))
});
问题是,当 LESS
中出现错误时,任务仍在继续并构建目标文件。最重要的是,我放置了错误记录函数和 emit('end')
作为对 gulp.dest
.
的回调
现在,当 less()
的回调是错误日志并且 emit('end')
一切正常时。
我尝试过的最好的解决方案;
https://github.com/gulpjs/gulp/blob/master/docs/recipes/combining-streams-to-handle-errors.md
var combiner = require('stream-combiner2');
gulp.task('multi:less', function(done) {
var combined = combiner.obj([
gulp.src(srcs),
less(),
autoprefixer({
browsers: ['last 6 versions'],
cascade: false
}),
isDev ? null : cleanCss(),
gulp.dest(targetDir + 'css/multi/'),
].filter(v => v));
// any errors in the above streams will get caught
// by this listener, instead of being thrown:
combined.on('error', console.error.bind(console));
combined.on('end', () => {}); //done have been call when return combined;
return combined;
}
我遇到了 gulp
的问题。我 运行 gulp-watch
以及 gulp-less
和 gulp-clean
。一切都运行宁完美。
当我编辑 somefile.less
并保存它时缺少分号,或者我可能不小心留下了尾随 ;s
,保存时我的代码出现错误,gulp-less
在控制台中记录错误。在我修复它后 gulp-watch
继续观察文件,但是 gulp-less
没有触发也没有编译。当我在终端再次停止 gulp
和 运行 时,一切恢复正常。
这是我的 gulpfile.js
:
var gulp = require('gulp');
var clean = require('gulp-clean');
var gutil = require('gulp-util');
var less = require('gulp-less');
var watch = require('gulp-watch');
var path = require('path');
gulp.task('clean', function() {
return gulp.src('src/main/webapp/styles/build', {read: false})
.pipe(clean().on('error', gutil.log))
});
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', gutil.log);
});
gulp.task('watch', function() {
watch('src/main/webapp/styles/**/*.{less, css}', function() {
gulp.start('less')
.on('error', gutil.log);
})
});
gulp.task('default', ['clean'], function() {
gulp.start(['less', 'watch'])
.on('error', gutil.log);
});
这是我的 devDependencies
:
"devDependencies": {
"gulp": "^3.8.10",
"gulp-clean": "^0.3.1",
"gulp-less": "^2.0.1",
"gulp-util": "^3.0.2",
"gulp-watch": "^3.0.0"
}
最后,这是控制台中的消息:
[10:21:03] imports/productSearchPage.less was changed
[10:21:03] Starting 'less'...
[10:21:03] { [Error: Unrecognised input. Possibly missing something in file /src/main/webapp/styles/imports/productSearchPage.less line no. 1008]
type: 'Parse',
filename: '/src/main/webapp/styles/imports/productSearchPage.less',
index: 19127,
line: 1008,
callLine: NaN,
callExtract: undefined,
column: 0,
extract: [ '', '', undefined ],
message: 'Unrecognised input. Possibly missing something in file /src/main/webapp/styles/imports/productSearchPage.less line no. 1008',
stack: undefined,
lineNumber: 1008,
fileName: '/src/main/webapp/styles/imports/productSearchPage.less',
name: 'Error',
showStack: false,
showProperties: true,
plugin: 'gulp-less',
__safety: { toString: [Function] } }
[10:21:04] imports/productSearchPage.less was changed
[10:21:08] imports/productSearchPage.less was changed
^C
能否请您告诉我 gulp-watch
任务有什么问题,并帮助我在消除错误后 运行 gulp-less
完成它,而无需重新启动 gulp
.
编辑:
我编辑的 gulp-less
任务
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', function(err) {
gutil.log(err);
this.emit('end');
});
});
我刚刚为我自己的个人项目设置了这个。根据 Gulp docs,你可以只使用 gulp.watch
:
gulp.task('watch', function() {
gulp.watch('src/main/webapp/styles/**/*.{less, css}', ['less'])
.on('error', gutil.log);
});
编辑:如果这没有帮助,请将您的 less
任务更改为:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less())
.on('error', function (err) {
gutil.log(err);
this.emit('end');
})
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', gutil.log);
});
改编自this comment。
我总是使用 gulp-plumber 来捕获错误。工作起来非常容易,并将错误记录到控制台。
示例:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(plumber())
.pipe(less().on('error', gutil.log))
.pipe(gulp.dest('src/main/webapp/styles/build'))
.on('error', function(err) {
gutil.log(err);
this.emit('end');
});
});
现在可以用了!这是我的最终工作 gulp-less
任务:
gulp.task('less', function() {
return gulp.src(['src/main/webapp/styles/main.less'], {base: 'src/main/webapp/styles/'})
.pipe(less().on('error', function(err){
gutil.log(err);
this.emit('end');
}))
.pipe(gulp.dest('src/main/webapp/styles/build'))
});
问题是,当 LESS
中出现错误时,任务仍在继续并构建目标文件。最重要的是,我放置了错误记录函数和 emit('end')
作为对 gulp.dest
.
现在,当 less()
的回调是错误日志并且 emit('end')
一切正常时。
我尝试过的最好的解决方案; https://github.com/gulpjs/gulp/blob/master/docs/recipes/combining-streams-to-handle-errors.md
var combiner = require('stream-combiner2');
gulp.task('multi:less', function(done) {
var combined = combiner.obj([
gulp.src(srcs),
less(),
autoprefixer({
browsers: ['last 6 versions'],
cascade: false
}),
isDev ? null : cleanCss(),
gulp.dest(targetDir + 'css/multi/'),
].filter(v => v));
// any errors in the above streams will get caught
// by this listener, instead of being thrown:
combined.on('error', console.error.bind(console));
combined.on('end', () => {}); //done have been call when return combined;
return combined;
}