-
Notifications
You must be signed in to change notification settings - Fork 0
Open
@bai3
Description
gulp学习
先贴代码
var gulp = require('gulp'); var fileinclude = require('gulp-file-include') var del = require('del'); var copy = require('copy'); var htmlmin = require('gulp-htmlmin'); var autoprefixer = require('gulp-autoprefixer'); var cleancss = require('gulp-clean-css'); var gulpSequence = require('gulp-sequence'); // 压缩图片 var imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'), //确保本地已安装gulp-cache [cnpm install gulp-cache --save-dev] cache = require('gulp-cache'); gulp.task('del', () => { console.log("开始清理dist文件夹") return del(['dist/*!.git'], function(){ console.log("清理完毕") }) }); /** * PC端部分配置 */ gulp.task('first-page-html', function() { console.log('开始压缩首页的html'); let options = { removeComments: true, // 清除html注释 collapseWhitespace: true, // 去除html空格 removeEmptyAttributes: true, //删除所有空格作属性值 minifyCSS: true, // 压缩页面css minifyJS: true, //压缩页面js,好像失败了 } return gulp.src(['*.html']) .pipe(htmlmin(options)) .pipe(gulp.dest('dist')); }) gulp.task('first-page-css', function() { console.log('开始压缩首页的css') return gulp.src(['*.css']) .pipe(autoprefixer({ browsers: ['last 10 versions'], cascade: false })) .pipe(cleancss()) .pipe(gulp.dest('dist/')); }) gulp.task('cssmin-pc', function() { console.log("开始压缩PC端css") return gulp.src(['pages/**/*.css']) .pipe(autoprefixer({ browsers: ['last 10 versions'], cascade: false })) .pipe(cleancss()) .pipe(gulp.dest('dist/pages')); }) // 执行模板和html和压缩任务 gulp.task('template-pc', function() { console.log('开始执行PC端模板'); return gulp.src(['pages/**/*.html']) .pipe(fileinclude({ prefix: '@@', basepath: '@file' })) .pipe(gulp.dest('src-pc')); }) gulp.task('htmlmin-pc', function() { console.log('开始进行PC端html压缩'); let options = { removeComments: true, // 清除html注释 collapseWhitespace: true, // 去除html空格 removeEmptyAttributes: true, //删除所有空格作属性值 minifyCSS: true, // 压缩页面css minifyJS: true, //压缩页面js,好像失败了 } return gulp.src(['src-pc/**/*.html']) .pipe(htmlmin(options)) .pipe(gulp.dest('dist/pages')); }) gulp.task('del-pc', () => { console.log("开始清理pc临时模板文件") return del(['src-pc']) }); /** * 移动端部分配置 */ // 移动端压缩css gulp.task('cssmin-h5', function() { console.log("开始压缩移动端端css") return gulp.src(['m/css/*.css']) .pipe(autoprefixer({ browsers: ['last 10 versions'], cascade: false })) .pipe(cleancss()) .pipe(gulp.dest('dist/m/css')); }) gulp.task('template-h5', function() { console.log('开始执行移动端模板工作'); return gulp.src(['m/**/*.html']) .pipe(fileinclude({ prefix: '@@', basepath: '@file' })) .pipe(gulp.dest('src-h5')); }) gulp.task('htmlmin-h5', function() { console.log('开始进行移动端html压缩'); let options = { removeComments: true, // 清除html注释 collapseWhitespace: true, // 去除html空格 removeEmptyAttributes: true, //删除所有空格作属性值 minifyCSS: true, // 压缩页面css minifyJS: true, //压缩页面js,好像失败了 } return gulp.src(['src-h5/**/*.html']) .pipe(htmlmin(options)) .pipe(gulp.dest('dist/m')); }) gulp.task('del-h5', () => { console.log("开始清理H5临时模板文件") return del(['src-h5']) }); // 压缩图片 gulp.task('testImagemin', function () { console.log('压缩pc端图片'); gulp.src('images/*.{png,jpg,gif,ico,svg}') .pipe(cache(imagemin({ progressive: true, svgoPlugins: [{removeViewBox: false}], use: [pngquant()] }))) .pipe(gulp.dest('dist/images')); }); gulp.task('testImageminh5', function () { console.log('压缩移动端图片') gulp.src('m/images/*.{png,jpg,gif,ico,svg}') .pipe(cache(imagemin({ progressive: true, svgoPlugins: [{removeViewBox: false}], use: [pngquant()] }))) .pipe(gulp.dest('dist/m/images')); }); gulp.task('copy', () => { // 复制一级目录下的所有文件 console.log("开始复制一级目录下的所有文件") copy(['*','.gitignore'],'dist',() => console.log("一级目录下的所有文件复制完成")); copy(['pages/help/**/*'],'dist/pages/help/', () => console.log("help文件夹资料拷贝")) copy('m/lib/**','dist/m/lib', () => console.log('移动端lib文件拷贝')); copy('m/js/**','dist/m/js', () => console.log('移动端js插件拷贝')); copy('v2/**/*','dist/v2',() => console.log('v2文件夹复制完毕')); copy('pc/**/*','dist/pc',() => console.log('pc文件夹复制完毕')) }); // 打包和测试的任务队列 gulp.task('build-quence', gulpSequence('del-pc','del','copy',['first-page-html','first-page-css'],'template-pc','htmlmin-pc','cssmin-pc','del-pc','template-h5','htmlmin-h5','cssmin-h5','del-h5','testImagemin','testImageminh5')) gulp.task('test-quence-pc',function(cb){ gulpSequence('template-pc','htmlmin-pc')(cb) }) // 默认任务 gulp.task('build', () => { console.log('打包到dist文件夹') gulp.start('build-quence') }) gulp.task('watch', ()=> { console.log('启动热更新,用于实时测试') gulp.watch("pages/**/*.html",["test-quence-pc"]) gulp.watch("pages/**/*.css",["cssmin-pc"]) }) // 完美没毛病
学习目的
为公司官网PC端和移动端引入打包工具,压缩代码图片以及进行模板解耦
学习过程
主要学习gulp基本知识和基本使用以及相关插件的使用
用到的插件
-
fileinclude html模板插件(在html上运用类似后端的模板引擎)
gulp.task('template-pc', function() { console.log('开始执行PC端模板'); return gulp.src(['pages/**/*.html']) .pipe(fileinclude({ prefix: '@@', basepath: '@file' })) .pipe(gulp.dest('src-pc')); })
-
del 插件用于删除文件和文件夹
-
copy插件用于复制文件和文件夹
-
htmlmin 插件用于压缩的html以及html内部的css和js
-
autoprefixer 插件用于css自动添加浏览器头部
-
cleancss 插件用于压缩css
-
imagemin 插件用于压缩图片
-
gulpSquence插件用于创建任务队列
遇到的问题以及解决
- htmlmin插件存在一个小问题,设置minifyJs:true还是没能压缩html内的js代码,略坑
- 因为gulp的任务是异步执行的,如果两个任务存在顺序执行关系,就容易导致错误,所以引入gulp-sequence插件解决任务队列问题
- gulp文件匹配都采用类似正则匹配规则,不是很熟悉。
最后
不断优化打包工具,先后引入了图片压缩插件,大概一张200kb图片能减少十几k的样子,还创建一个单的的任务队列,用于在写代码的时候,监听代码变化实时进行模板合并,可以实时预览效果。具体的插件使用参考上面贴的代码。注意下打包前打包后相关文件夹路径问题,以及文件匹配规则问题。gulp总的来说比较简单,但是效率不是很高,目前的项目一般不会采用。。。,还是继续当个webpack配置工程师。。。。