gulp-用自动化构建工具增强你的工作流程!
首先检查有没有安装node,node自带有包管理工具npm
没有的话可以去node官网下载,版本号为偶数是稳定版
cmd进入命令行输入 node -v 显示版本号表示node安装成功
npm -v 同样显示版本号为成功
好了,现在准备工作都做好了,可以开始使用了
都是在cmd用命令行操作
npm install -g gulp
任意目录下都可以
二.进入你的项目目录安装如果没有初始化项目的先在命令行输入
npm init
一直回车到yes;这会使你的项目有一个叫package.json的文件,里面是你项目的包和各种信息,可以在里面查看你的插件有没有安装成功
1.将gulp作为你项目的开发依赖安装到开发环境npm install gulp --save-dev
gulp的安装不能简写 后面的包可以简写 install为 i
2.根据你的开发目录安装插件进行压缩
这里我将对font下面的文件夹的内容进行压缩打包到线上
里面会写入执行压缩的代码
三、开始压缩文件 -进入项目目录打开cmd操作 1.压缩html -安装插件 gulp-minify-htmnpm i gulp-minify-htm -D
简写安装到开发环境
gulpfile.js 文件写入
解释一下gulp.src()里面的目录是开发目录的文件
gulp.dest()里面的目录是你要压缩到线上的目录
const gulp = require("gulp");
const html = require('gulp-minify-html');
gulp.task('uglifyhtml', () => {
return gulp.src('src/html/*.html')
.pipe(html())//执行压缩
.pipe(gulp.dest('online/html/'));
});
然后保存 cmd 输入
gulp uglifyhtml
–task 后面是任务名
2.压缩css -安装插件 gulp-minify-csscmd
npm i gulp-minify-css -D
gulpfile.js 写入
const css = require('gulp-minify-css');
gulp.task('uglifycss', () => {
return gulp.src('src/style/*.css')
.pipe(css())//执行压缩
.pipe(gulp.dest('online/style/'));
})
然后保存 cmd 输入
gulp uglifycss
3.压缩js
这个稍显麻烦
安装三个插件 gulp-uglify gulp-babel babel-preset-es2015
cmd
npm i gulp-uglify -D
npm i gulp-babel -D
npm i babel-preset-es2015 -D
避免 gulp-babel 编译时出现Cannot find module ‘@babel/core’, gulp-babel 的版本建议安装7.0.1
npm install gulp-babel@7 --save-dev
都安装完毕,需要在根目录下新建一个文件 .babelrc
写入
{
"presets": ["es2015"]
}
gulpfile.js 写入
const script = require('gulp-uglify'); //js压缩
const babel = require("gulp-babel");
gulp.task('uglifyjs', () => {
return gulp.src('src/script/*.js')
.pipe(babel({//先将es6转换成es5
presets: ['es2015']//es2015->es6 es2016->es7...
}))
.pipe(script())//再执行压缩
.pipe(gulp.dest('online/script/'));
});
cmd
gulp uglifyjs
4.压缩sass
安装插件 gulp-sass gulp-sourcemaps gulp-load-plugins
cmd
npm i gulp-sass -D
npm i gulp-sourcemaps -D
npm i gulp-load-plugins -D
如果安装出错可以利用nrm cnpm 切换着用,还不行就可以看我之前的博客,有一个解决方法
gulpfile.js 写入
const sass = require('gulp-sass');
//引入生成.map文件模块
const sourcemaps = require('gulp-sourcemaps');
//生成.map文件
const plugins = require('gulp-load-plugins')();//返回的是一个函数体。需要再次执行。
gulp.task('compilesass', () => {
return gulp.src('src/sass/*.scss')
//初始化gulp-sourcemaps插件
.pipe(plugins.sourcemaps.init())
.pipe(plugins.sass({
outputStyle: 'compressed'
}))
//通过sourcemaps,生成.map文件
.pipe(plugins.sourcemaps.write('.'))
.pipe(gulp.dest('online/sass/'));
});
cmd
gulp compilesass
5.压缩图片 gulp-imagemin
cmd
npm i gulp-imagemin -D
gulpfile.js 写入
const imagemin = require('gulp-imagemin');//gulp-imagemin图片压缩(png)
gulp.task('uglifyimg', () => {
return gulp.src('src/img/*.{png,gif,jpg,ico}')
.pipe(imagemin())//执行压缩
.pipe(gulp.dest('online/img/'));
});
cmd
gulp uglifyimg
6.实现监听 gulp-watch
想要改变文件又不想重复压缩,就可以安装这个;
不过这个任务必须等你要监听的任务跑过第一遍它才会记录监听
cmd
npm i gulp-watch -D
gulpfile.js写入
const watch = require('gulp-watch');
gulp.task('default', function () {
watch(['src/html/*.html', 'src/style/*.css', 'src/script/*.js','src/sass/*.scss', 'src/img/*.{png,gif,jpg,ico}'], gulp.parallel('uglifyhtml', 'uglifycss', 'uglifyjs', 'compilesass','uglifyimg'));
});
这个default是默认任务名 执行只需要在cmd敲入 gulp即可,当然也可以加上名字
gulp
最后就可以压缩打包到线上目录了,关于插件的安装和执行任务如果失败了,就多安装几次,最后一个任务一个任务的试,gulpfile里只要有一个插件写入有问题,其他任务都跑不起来。
整理一下gulpfile.js文件
const gulp = require("gulp");
const html = require('gulp-minify-html');//压缩html的插件
const css = require('gulp-minify-css');//压缩css的插件
const script = require('gulp-uglify'); //js压缩
const babel = require("gulp-babel");
const watch = require('gulp-watch');
const imagemin = require('gulp-imagemin');//gulp-imagemin图片压缩(png)
//sass编译
//gulp-sass gulp-sourcemaps gulp-load-plugins
const sass = require('gulp-sass');
//引入生成.map文件模块
const sourcemaps = require('gulp-sourcemaps');
//生成.map文件
const plugins = require('gulp-load-plugins')();//返回的是一个函数体。需要再次执行。
//1.压缩js并且将es6转化为es5
gulp.task('uglifyjs', () => {
return gulp.src('src/script/*.js')
.pipe(babel({//先将es6转换成es5
presets: ['es2015']//es2015->es6 es2016->es7...
}))
.pipe(script())//再执行压缩
.pipe(gulp.dest('online/script/'));
});
// gulp - sass gulp - sourcemaps gulp - load - plugins
//2.压缩sass
gulp.task('compilesass', () => {
return gulp.src('src/sass/*.scss')
//初始化gulp-sourcemaps插件
.pipe(plugins.sourcemaps.init())
.pipe(plugins.sass({
outputStyle: 'compressed'
}))
//通过sourcemaps,生成.map文件
.pipe(plugins.sourcemaps.write('.'))
.pipe(gulp.dest('online/sass/'));
});
//3.压缩html
gulp.task('uglifyhtml', () => {
return gulp.src('src/html/*.html')
.pipe(html())//执行压缩
.pipe(gulp.dest('online/html/'));
});
//4.压缩css
gulp.task('uglifycss', () => {
return gulp.src('src/style/*.css')
.pipe(css())//执行压缩
.pipe(gulp.dest('online/style/'));
})
//5.图片压缩插件-imagemin@6
//对png最大的压缩,其他的格式几乎压不动。
gulp.task('uglifyimg', () => {
return gulp.src('src/img/*.{png,gif,jpg,ico}')
.pipe(imagemin())//执行压缩
.pipe(gulp.dest('online/img/'));
});
//6.监听
//参1:监听的目录,数组的形式
//参2:通过gulp.parallel()并行监听任务名。
//监听上面的任务,监听之前任务必须先跑一次。再进行监听。
gulp.task('default', function () {
watch(['src/html/*.html', 'src/style/*.css', 'src/script/*.js','src/sass/*.scss', 'src/img/*.{png,gif,jpg,ico}'], gulp.parallel('uglifyhtml', 'uglifycss', 'uglifyjs', 'compilesass','uglifyimg'));
});