Dodaję watchify
do naszego procesu kompilacji, ale chcę wprowadzić warunek wstępny do obserwowania działania, a to, że zmieniony plik przechodzi przez nasz krok linting (który używa ESLint
).Uruchom eslint przed uruchomieniem działa
myślałem w ten sposób:
function runBrowserify(watch){
var babel = babelify.configure({
optional: ['es7.objectRestSpread']
});
var b = browserify({
entries: './app/main.js',
debug: true,
extensions: ['.jsx', '.js'],
cache: {},
packageCache: {},
fullPaths: true
})
.transform(babel);
if(watch) {
// if watch is enable, wrap this bundle inside watchify
b = watchify(b);
b.on('update', function(ids) {
//run the linting step
lint(ids);
//run the watchify bundle step
gutil.log(gutil.colors.blue('watchify'), 'Started');
bundleShare(b);
});
b.on('time', function (time) {
gutil.log(gutil.colors.blue('watchify'), 'Finished', 'after', gutil.colors.magenta(time), gutil.colors.magenta('ms'));
});
}
bundleShare(b);
}
function bundleShare(b) {
b.bundle()
.pipe(source('main.min.js'))
.pipe(gulp.dest('./dist'));
}
function lint(glob) {
return gulp.src(glob)
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failOnError());
}
Problemem jest to, że krok do strzępienia jest asynchroniczny więc nie zakończyć przed pakietowa byłoby zrobić (to również rzuca więc prawdopodobnie trzeba użyć plumber
aby zatrzymać go od zakończenia kroku watch
).
W jaki sposób zdefiniować warunki wstępne, zanim zadzwonię pod numer bundleShared
?
Czy to wymyśliłeś? – Loknar
nie. Muszę zadowalać się nimi biegnąc obok siebie, więc czasami brakuje mi błędów ESLint –
Zastanawiam się, czy może to zrobić, przekazując zamknięcie do watchify.on ("update", func)? https://github.com/substack/watchify Spróbuję go kiedyś i dam znać –