Gulp是基于node平台开发的前端构建工具
将机械化操作编写成任务,想要执行机械化操作时执行一个命令行命令任务就能自动执行了
用机器代替手工,提高开发效率
1. Gulp能做什么:
- 项目上线,HTML、CSS、 JS文件压缩合并
- 语法转换(es6、less...)
- 公共文件抽离
- 修改文件浏览器自动刷新
2. Gulp使用:
① 使用npm install gulp下载gulp文件。 注意:库文件都是本地安装,不需要加-g
② 在项目根目录下建立gulpfile.js文件。gulpfile.js文件的名字是gulp要求的,不能随意更改
③ 重构项目的文件夹结构src目录放置源代码文件dist目录放置构建后文件
④ 在gulpfile.js文件中编写任务
⑤ 在命令行工具中执行gulp任务
3. Gulp中提供的方法:
- gulp.src():获取任务要处理的文件
- gulp.dest():输出文件
- gulp.task():建立gulp任务
- gulp.watch():监控文件的变化
const gulp = require('gulp'); // 使用gulp.task()方法建立任务 gulp.task('first', () => { // 获取要处理的文件 gulp.src('./src/css/base.css') // 将处理后的文件输出到dist目录 .pipe(gulp.dest('./dist/css')); });
注意:必须要把处理的代码写在.pipe里
如何执行这个任务呢?如果使用node gulpfile.js则执行的是gulpfile.js整个文件。而我们需要执行的是当前这个文件中的first任务,我们可以使用gulp命令来执行这个文件。
下载gulp命令行工具:npm install gulp-cli -g注意不是库文件,需要全局安装
下载完成之后,命令行中多了一个命令:gulp first
4. Gulp插件:
gulp属于轻内核的第三方模块,提供的方法非常少,所有的其他功能都是通过插件的方式实现。
- gulp-htmlmin:htm|文件压缩
- gulp-csso:压缩css
- gulp-babel:JavaScript语法转化
- gulp-less:less语法转化
- gulp-uglity:压缩混淆JavaScript
- gulp-file-include:公共文件包含
在html中先抽离出公共的代码,然后再引入,gulp中使用@@include引入:
// 引入公共的头部部分 @@include('./common/header.html');
- browsersync:浏览器实时同步
// 引用gulp模块 const gulp = require('gulp'); const htmlmin = require('gulp-htmlmin'); const fileinclude = require('gulp-file-include'); const less = require('gulp-less'); const csso = require('gulp-csso'); const babel = require('gulp-babel'); const uglify = require('gulp-uglify'); // html任务 // 1. html文件中代码的压缩操作 // 2. 抽取html文件中的公共代码 gulp.task('htmlmin', () => { // src目录下的所有html文件 gulp.src('./src/*.html') .pipe(fileinclude()) // 压缩html文件中的代码, collapseWhitespace为是否压缩空格 .pipe(htmlmin({ collapseWhitespace:true })) .pipe(gulp.dest('dist')); }); // css任务 // 1. less语法转换 // 2. css代码压缩 gulp.task('cssmin', () => { // css目录下的所有less文件以及css文件 gulp.src(['./src/css/*.less', './src/css/*.css']) // 将less语法转换为css语法 .pipe(less()) // 将css代码进行压缩 .pipe(csso()) // 将处理结果进行输出 .pipe(gulp.dest('dist/css')); }); // js任务 // 1. es6代码转换 // 2. 代码压缩 // 安装babel模块:npm install --save gulp-babel @babel/core @babel/preset-env // @babel/core @babel/preset-env是gulp-babel所依赖的模块 gulp.task('jsmin', () => { gulp.src('./src/js/*.js') // 将less语法转换为css语法 .pipe(babel({ // 它可以判断当前代码的运行环境,将代码转换为当前运行环境所支持的代码 presets: ['@babel/env'] })) .pipe(uglify()) // 将处理结果进行输出 .pipe(gulp.dest('dist/js')); }); // 复制文件夹 gulp.task('copy', () => { gulp.src('./src/images/*') .pipe(gulp.dest('dist/images')); gulp.src('./src/lib/*') .pipe(gulp.dest('dist/lib')); });
如果想要执行一个命令,其他的所有任务就会自动执行,那就需要进行gulp构建任务:
// 构建任务 // 输入命令gulp default,则其他任务也就会自动执行 gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']);