完成一个项目的自动化构建
项目目录结构及构建需求:
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":{ |