gulp 回顾:在没有使用webpack/gulp之前,前端在开发过程中,你应该遇到过代码修改后浏览器没有实时的进行对应刷新,相对应dom节点的未重新渲染,需要手动重新编译或者手动刷新等,这就让人很无奈,那有没有什么方法可以解决这个问题呢!!!of course 当然有
场景:前端进行项目开发,重新编译实时刷新(这应该是开发人员都需要的。。。),接下来我们就说一说gulp 是如何帮助你实现这般如此的效果的。
gulp 将开发流程中让人痛苦或耗时的任务自动化,从而减少你所浪费的时间、创造更大价值。 ——- 官网
入门: 注意:进行安装gulp之前,要保证自己自己的环境已经安装过node,同时npm/yarn也要有的哦
话不多说,上来就是先安装(这里以 yarn 为安装包管理工具)
基操命令行:
1 2 yarn add gulp -g //全局安装 yarn add gulp //局部安装
安装完成后,通过 -v 命令进行检查是否安装成功;保证你的环境已经存在gulp,这个时候你就可以“肆意妄为”了。
1 2 3 4 5 ps: mkdirp my-project cd my-project npm init npm install gulp
这个时候保证自己的gulp已经安装成功的奇前提下,在根目录下创建gulpfile.js文件,用来创建任务;使用gulp 执行文件 下面来来看一个简单的gulpfile.js例子:
1 2 3 4 5 6 function testTask() { } exports.default = testTask //你也可以使用其他需要转移的语言来创建一个gulpfiles文件,比如:TypeScript/Bable 这里要注意安装对应的依赖(有兴趣的小伙伴可以去自己探索一哈)
显而易见,这个文件中任务没有进行实质性的操作,空的的gulp文件;export一个任务,就结束了。这个时候可能会有人问如何创建任务呢?
1 2 3 4 5 var gulp = require('gulp') //首先必须是引入gulp模块 gulp.task("test", ()=>{ //逻辑代码 })
这就创建了一个简单的任务了。
那如何实现使用gulp编译呢??? 实现起来还是需要知道基本的一些API的:src、dest、series、watch、task、parallel src : 创建一个流,用于读取文件 dest : 创建一个将文件元数据对象写入的流(打包后的文件) series:将任务合成更大的操作(按顺序执行) parallel : 将任务合成更大的操作(同时执行) watch : 监听 task : 创建任务
同时,你可能还需要知道一些常用的依赖: gulp-concat : 用于文件合并 gulp-uglify : js文件压缩(可以使用其他的插件,效果相同) gulp-rename : 重命名 gulp-clean-css : css文件压缩 gulp-htmlmin : html文件压缩 gulp-livereload : 热更新,不会自动刷新 gulp-connect’ : 热更新,自动刷新
一个比较完整的demo: 创建html 文件,创建对应的css/js文件,这里就不多说了test1.css test2.css test1.js test2.js index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 var gulp = require('gulp') var concat = require('gulp-concat') var uglify = require('gulp-uglify') var rename = require('gulp-rename') var cssClean = require('gulp-clean-css') var htmlmin = require('gulp-htmlmin') var livereLoad = require('gulp-livereload') var connect = require('gulp-connect') // 注册任务 // gulp.task("任务名", ()=>{ // }) // gulp.task('test',()=>{ // console.log("3333") // }) // 注册默认任务 // gulp.task("default",["任务名"]) gulp.task("js", ()=>{ return gulp.src('src/js/*.js') .pipe(concat('bound.js')) .pipe(gulp.dest('dist/js/')) .pipe(uglify()) // .pipe(rename('bound.min.js')) .pipe(rename({suffix:'.min'})) .pipe(gulp.dest('dist/js/')) .pipe(livereLoad()) // .pipe(connect.reload()) }) gulp.task("css",()=>{ return gulp.src('src/css/*.css') .pipe(concat('bound.css')) .pipe(cssClean()) .pipe(rename('bound.min.css')) .pipe(gulp.dest('dist/css/')) .pipe(livereLoad()) // .pipe(connect.reload()) }) gulp.task('html',()=>{ return gulp.src('index.html') .pipe(htmlmin({collapseWhitespace:true})) .pipe(gulp.dest('dist/')) .pipe(livereLoad()) // .pipe(connect.reload()) }) // 监听(半自动) gulp.task('watch', ()=>{ // 开启监听 livereLoad.listen() // 监听对应任务 实现实时刷新 gulp.watch('src/js/*.js',gulp.parallel(['js'])) gulp.watch('src/css/*.css',gulp.parallel(['css'])) gulp.watch('index.html',gulp.parallel(['html'])) }) // 监听全自动 gulp.task('serve', (cb) => { connect.server({ root:'dist/', livereLoad:true, port:5001 }) gulp.watch('src/js/*.js',gulp.series(['js'])) gulp.watch('src/css/*.css',gulp.series(['css'])) gulp.watch('index.html',gulp.series(['html'])) cb() }) gulp.task('default',gulp.series(['serve','js','css','html']))