這段配置是以前的gulp版本不適配新版本node後,更新到了gulp4的新寫法。css
在業務中,目前使用這份配置的是一個Koa2+njk項目,因此增長了nodemon
來啓動server。node
分別用到的技術爲:es6
廢話很少說,上代碼:gulp
/* * Gulp4通用配置 * Author: Kinice * Time: 2018-12-26 */ const gulp = require('gulp') const path = require('path') const less = require('gulp-less') const browserSync = require('browser-sync').create() const reload = browserSync.reload const cleancss = require('gulp-cssnano') const autoprefixer = require('gulp-autoprefixer') const pump = require('pump') const uglify = require('gulp-uglify') const sourcemaps = require('gulp-sourcemaps') const babel = require('gulp-babel') const nodemon = require('gulp-nodemon') const changed = require('gulp-changed') const config = require('./config') const port = process.env.PORT || config.port // 將所需的資源path放到一塊兒便於管理 const paths = { style: { src: 'src/less/**/*.less', dest: 'public/css/' }, script: { src: 'src/js/**/*.js', dest: 'public/js/' }, view: { src: 'views/**/*.njk', dest: 'views/' } } // 處理less的task function style(callback) { // pump提供了中斷pipe的callback return pump([ gulp.src(path.join(__dirname, paths.style.src)), // 開啓sourcemap以方便調試 sourcemaps.init(), less(), autoprefixer({ browsers: [ '>1%', 'last 10 version', 'iOS >= 8' ] }), cleancss(), sourcemaps.write('maps'), gulp.dest(path.join(__dirname, paths.style.dest)), reload({ stream: true }) ], callback) } // 處理js的task function script(callback) { return pump([ gulp.src(path.join(__dirname, paths.script.src)), sourcemaps.init(), babel(), uglify(), sourcemaps.write('maps'), gulp.dest(path.join(__dirname, paths.script.dest)) ], callback) } // 監測文件修改並調用相應task以後刷新頁面 function watch() { gulp.watch(path.join(__dirname, paths.style.src), style) gulp.watch(path.join(__dirname, paths.script.src), script) gulp.watch(path.join(__dirname, `${paths.style.dest}*.css`)).on('change', reload) gulp.watch(path.join(__dirname, `${paths.script.dest}*.js`)).on('change', reload) gulp.watch(path.join(__dirname, `${paths.view.dest}*.njk`)).on('change', reload) } // 使用nodemon啓動node server,若是不含node就去掉 function server() { nodemon({ script: 'app.js' }) browserSync.init({ proxy: `http://localhost:${port}` }) } exports.style = style exports.script = script exports.watch = watch // 同步執行script和style task let build = gulp.parallel(script, style) // 先build,再同步啓動node server和開啓文件監測 gulp.task('default', gulp.series(build, gulp.parallel(server, watch)))