Trong thời đại mà Webpack, Parcel and Rollup đang làm tốt vai trò bundle file JavaScript thì việc dùng gulp đúng là lạc hậu. Nhưng bài này mình muốn làm để hướng dẫn cho bạn nào muốn hoài niệm về thời kỳ đồ đá

Share file gulp có khả năng chia layout browser sync build sass build js minify

2021-08-24 1154 lượt xem

Bài này sẽ làm được gì? 

  • Chúng ta có thể chia layout với gulp. 
  • Có thể build tự dộng với lệnh watch
  • có thể minify css và js
  • biên dịch css qua các css cũ hơn. 

Cấu trúc project 

PROJECTS
    |- dist
    |   |- pages, css, js <===== đây là đống kết quả
    |- src
    |   |- javascript
    |   |   |- app.js
    |   |- pages
    |   |   |- index.html
    |   |   |- about.html
    |   |- partial
    |   |   |- header.html
    |   |   |- footer.html
    |   |- scss
    |   |   |- index.scss
    |   |   |- about.scss
    |- package.json
    |- gulpfile.js

Install

npm install gulp -g
npm init
npm install gulp gulp-file-include gulp-uglify gulp-cached gulp-rename 
npm install gulp-cssnano gulp-autoprefixer sass gulp-sass
npm install browser-sync

Cấu hình gulpfile.js

var gulp         = require('gulp');
var path         = require('path');
var sass         = require('gulp-sass')(require('sass'));
var uglify       = require('gulp-uglify');
var cssnano      = require('gulp-cssnano');
var autoprefixer = require('gulp-autoprefixer');
var fileinclude  = require('gulp-file-include');
var rename       = require("gulp-rename")
var cache        = require('gulp-cached')

// đầu tiên hãy tạo 1 thể hiện của browserSync
var browserSync = require('browser-sync').create();

gulp.task('sass', function () {
    return gulp.src('src/scss/*.scss')
       .pipe(sass())
       .pipe(autoprefixer({
            overrideBrowserslist: ['> 1%']
        }))
        .pipe(cssnano())
       .pipe(gulp.dest(path.join(__dirname, 'dist/css'))) /// tạo mới folder
       .pipe(browserSync.stream({match: '**/*.css'})) /// xem stream nó khác reload như nào nhé!!!
});

gulp.task('js', function() {
    return gulp.src("src/javascript/*.js")
       .pipe(cache('linting'))
       .pipe(uglify() )
       // .pipe(rename({ suffix: '.min' }))
       .pipe(gulp.dest(path.join(__dirname, '/dist/js/')))
});
gulp.task('fileinclude', function() {
    return gulp.src([ "src/pages/*.html" ])
        .pipe(fileinclude({
            prefix: '@@',
            basepath: '@file'
        }))
       .pipe(gulp.dest(path.join(__dirname, '/dist/pages/')))
})
// RELOAD
gulp.task('reload', function () {
    browserSync.reload();
});
gulp.task('watch', function () {
    browserSync.init({
        server: {
            baseDir: "./dist" 
        }
    });
    /// cấu hình html
    gulp.watch('src/pages/*.html', gulp.series('fileinclude')).on("change", browserSync.reload )
    gulp.watch('src/partial/*.html', gulp.series('fileinclude')).on("change", browserSync.reload )
    /// cấu hình cho js
    gulp.watch("src/javascript/*.js",  gulp.series('js')).on("change", browserSync.reload )
    /// cấu hình cho scss
    gulp.watch("src/scss/*.scss",  gulp.series('sass'))
});

Kết quả: 

bài viết trong chủ đề