그래서 Gulp V4로 pug (jade), javascript 및 sass 파일을 컴파일하고 이러한 파일이 변경 될 때 browserSync를 사용하여 브라우저를 다시로드하려고합니다. 거기에 많은 가이드가 있지만 코드를 작성하는 방법에 관계없이 작업 순서를 올바르게 얻지 못하는 것 같습니다. 메신저 gulp.series
을 사용하여 작업 순서를 설정했지만 browserSync는 공을 재생하지 않으려 고합니다. 여기 Gulp 및 browserSync를 사용할 때 잘못된 재로드 순서가 발생합니다.
var gulp = require('gulp'),
... etc.
var paths = {
sass: ['src/scss/**/*.scss'],
js: ['src/js/**/*.js'],
pug: ['src/**/*.pug']
};
// Shared Tasks:
//*------------------------------------*/
gulp.task('clean', function(done){
del(['dist/assets/**/*.css', 'dist/assets/**/*.map', 'dist/assets/**/*.js']);
done();
});
// App Specific Tasks:
//*------------------------------------*/
// Sass
gulp.task('build-sass', function(){
gulp.src(paths.sass)
return sass(paths.sass, {
style: 'expanded'
})
.on('error', sass.logError)
.pipe(prefix('last 2 version', '> 1%', 'ie 8', 'ie 9'))
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist/assets/css'))
.pipe(cleanCSS({ advanced: false, keepSpecialComments: 0 }))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest('dist/assets/css'));
});
// JS
gulp.task('build-js', function(done){
gulp.src(paths.js)
.pipe(concat('all.js'))
.pipe(gulp.dest('dist/assets/js'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('dist/assets/js'))
done();
// Pug
gulp.task('build-pug', function buildHTML(done){
gulp.src(['src/**/*.pug'], {
base: 'src'
})
.pipe(pug())
.pipe(gulp.dest('./dist/'))
done();
});
// Service Tasks:
//*------------------------------------*/
// Delete the compiled views dir.
gulp.task('remove', function(done){
del(['dist/views/**/']);
done();
});
// Serve the site locally and watch for file changes
gulp.task('serve', function(done){
browserSync.init({
server: {
baseDir: './dist/',
notify: false,
open: false
}
});
// Watch & Reload Pug Files
gulp.watch([paths.pug], gulp.series('build-pug')).on('change', browserSync.reload);
// Watch & Reload Sass Files
gulp.watch([paths.sass], gulp.series('build-sass')).on('change', browserSync.reload);
});
gulp.task('default', gulp.series('clean', 'build-sass', 'build-js', 'build-pug', 'remove', 'serve', function(done){
done();
}));
그리고 터미널 콘솔 로그 출력이 시작 꿀꺽 :
$ gulp
[13:09:33] Using gulpfile ~/Dropbox Aaron/Dropbox (Personal)/01_Me/01_Dev/01_My Work/*Template/gulpfile.js
[13:09:33] Starting 'default'...
[13:09:33] Starting 'clean'...
[13:09:33] Finished 'clean' after 2.64 ms
[13:09:33] Starting 'build-sass'...
[13:09:33] Finished 'build-sass' after 443 ms
[13:09:33] Starting 'build-js'...
[13:09:33] Finished 'build-js' after 4.42 ms
[13:09:33] Starting 'build-pug'...
[13:09:33] Finished 'build-pug' after 3.15 ms
[13:09:33] Starting 'remove'...
[13:09:33] Finished 'remove' after 656 μs
[13:09:33] Starting 'serve'...
[BS] Access URLs:
-------------------------------------
Local: http://localhost:3000
External: http://10.130.91.51:3000
-------------------------------------
UI: http://localhost:3001
UI External: http://10.130.91.51:3001
-------------------------------------
[BS] Serving files from: ./dist/
그리고 이것은 내가 감시 파일 내 파일을 변경할 때 :
[BS] File changed: src/scss/4_elements/_elements.page.scss
[13:12:33] Starting 'build-sass'...
[13:12:34] write ./style.css
[13:12:34] Finished 'build-sass' after 366 ms
이 상황에서 필자가 생각하는 것처럼 파일이 바뀌고 있습니다. browserSyn c 페이지가 다시로드되고 'build-sass'가 시작됩니다. 어느 쪽이 잘못 돌아 갔는지. 나는 분명히 새소리를 만들고, 페이지를 새로 고침하고 싶다. 내가 원하는 코드를 새로 고치려면 브라우저를 2 번 저장해야합니다.
내가 사용했던 코드의 일부는 browserSync 문서에서 직접입니다 :
https://www.browsersync.io/docs/gulp#gulp-reload
이 작동하지 않습니다.
.pug 파일을 수정할 때 브라우저가 다시로드됩니까? 'build-sass'가 끝날 때 done() 호출은 없지만 return 문을 사용합니다. - 그 형식으로는 나에게 익숙하지 않은 것처럼 보일지라도 충분할 것입니다. 퍼그 변경으로 리로드가 발생하지 않으면 또 다른 제안이 있습니다. – Mark
done은 Gulp V4에서 필수 이벤트입니다. 그것을 추가해도 결과가 향상되지 않습니다. 그래서 내보기, 또는 옥/pug 파일을 업데이트 할 때 브라우저를 다시로드하려면 .pug가 변경 될 때 다시로드를 트리거하지 않고 어떻게해야합니까? – Aaron