完成一个项目的自动化构建
项目目录结构及构建需求:
1 | # 项目目录 |
构建开发过程
实现scss转换为css的构建
使用gulp-sass插件实现scss为css的转换
1 | // 实现这个项目的构建任务 |
实现脚本文件ES6的编译
使用gulp-babel实现ES6的转换
使用gulp-babel不会自动安装babel/core核心模块,还需要手动安装@babel/core以及@babel/preset-env。
@babel/preset-env会默认将ES6的所有新特性进行转换
1 | const { src, dest } = require('gulp') |
实现模板文件的编译
模板文件中使用了模板引擎swig,使用gulp-swig进行编译
1 | const swig = require('gulp-swig') |
实现开发环境编译组合任务
结合上面的任务,各个编译之间没有依赖关系,可以并行编译
1 | const { src, dest, parallel} = require('gulp') |
实现图片、字体等静态文件的编译
图片文件需要进行压缩,字体文件及静态文件可以直接导入写入文件流
图片压缩使用工具``
1 | const { src, dest, parallel} = require('gulp') |
实现正式环境部署编译组合任务
1 | // 实现这个项目的构建任务 |
优化– 构建前实现dist文件夹清除
del模块可以实现文件删除,它不是gulp的模块,但是可以在gulp中使用
yarn add del --dev
1 | const { src, dest, parallel,series} = require('gulp') |
优化–开发服务器实现热更新
使用browser-sync模块提供开发服务器,实现热更新
1 | const { src, dest, parallel,series, watch} = require('gulp') |
这里只是更新了dist的文件夹下文件,才会热更新服务器。
我们还需要对需要编译的文件进行监听,当文件发生变化时,自动更新至dist文件夹,从而进一步更新到浏览器
使用watch进行监听
1 | const { src, dest, parallel,series, watch} = require('gulp') |
优化–处理构建注释
使用useref处理构建注释。
1 | yarn add gulp-useref --dev |
1 | const { src, dest, parallel,series, watch} = require('gulp') |
优化–压缩文件
gulp-htmlmin:压缩html
gulp-uglify:压缩js
gulp-clean-css:压缩css
gulp-if:在gulp中使用if
在处理构建注释时,对文件进行压缩
因为文件的读取流和输出流是同一个目录,所以我们对构建进行优化,将开发环境的代码放置临时文件夹.temp,对正式构建的代码,放置dist目录
1 | //.... |
最终代码
处理下编译命令组合,最终代码如下:
1 | // 实现这个项目的构建任务 |
优化–在package.json中添加构建命令
1 | "script":{ |