维护人:戴荔春 (6016)
gulp自动构建知识体系大纲
新手可以直接看 hello word自动构建项目体验,先体验下自动构建的魅力
前人栽树,后台乘凉,本文参考了以下来源
gulp是基于Node.js开发的,所以需要注意
如没有,请移步 Node.js开发大纲
如没有,请移步 svn使用指南
gulp是前端开发过程中对代码进行构建的工具,通过gulp,我们可以轻易的管理项目,特别是前端项目中,可以轻易的将源码和部署包区分出来
这篇文章里有详细介绍gulp的使用
这篇文章里有详细介绍gulp的使用
所有的技术都是服务于实际需求的,不满足需求的技术研究都是空中阁楼,gulp也不例外
介绍gulp的安装与使用
注意,一般的项目中用到的gulp都建议采用全局安装
cnpm install --g gulp
全局安装好gulp后,可以创建一个hello word项目测试效果
压缩包下载: gulpfileAndHellobat.zip
window->打开cmd ->cd /d 对应的项目目录(即可进入对应目录)
gulp使用的前置技术条件是Node.js和cnpm都正确安装
否则请参考 Node.js的使用
在gulpfile.js使用之前,请确保 Node.js的环境变量有正确配置
否则请参考 Node.js环境变量配置
cnpm是中国区nodejs的特有产物
请参考 什么是cnpm
hello word项目里面没有配置package.json这些东西,只需要达到能使用效果就行了
这一步,将会引导新人使用一个已搭建好的自动构建项目,来体验自动构建的魅力
这个项目部署在本文作者的测试服务器,自动监听svn的变化,所以只需要提交svn即可刷新项目
地址: https://115.29.151.25/svn/testProject/trunk/gulpTestDemo/src/test.dcloud.testGulpDemo
账号: admin 密码: @epoint2016
测试项目: gulpTestDemo/src/test.dcloud.testGulpDemo
请注意,由于项目会不断变化,截图不一定准确,请以实际效果为主
请注意,gulpWatch.json文件是用来控制自动构建的,每次修改这个文件提交,服务端监听到就会自动构建项目
目前服务端的自动构建是 ->先删除以前的项目->部署新的项目.另外服务端没15秒监听一次svn变化,每次构建时间根据项目而定,如hello word项目可能耗时2-3s
gulp自动构建的原理解析,介绍上面那个 hello word自动构建项目的实现方法以及原理
上述自动构建项目,是基于 SVN自动更新方案获取最新源码以及Gulp Watch自动监听文件变化,以及Gulp 其它插件对文件进行操作输出部署,原理如下
以下主要讲解如何通过gulp自动监听文件变化并自动构建部署文件
请注意,前提条件是已经安装好了gulp并成功运行hello word程序
可以下载已经编写好的测试项目: autoBuildDemo.zip
本示例依赖于 gulp-clean,run-sequence,gulp-plumber这几个插件
双击安装本示例gulp依赖插件.bat
下载示例项目后可以找到这个文件
cnpm install gulp-clean gulp-plumber run-sequence -g
编写可执行的gulpfile.js
//示例项目的名称就是这个,如需改变,换为对应项目名即可 var projectPath = '/test.dcloud.testGulpDemo'; var src = './src' + projectPath; //也可以用../代表 当前gulpfile的上一级文件夹 var dest = './build' + projectPath+''; var config = { clean:{ src: dest }, other:{ src: src + "/**/*", dest: dest + "", svn:{ src: src + "/**/.svn/**/*", } }, watch:{ src:src+'/gulpWatch.json' } }; var gulp = require('gulp'); var clean = require('gulp-clean'); //串行执行任务 var runSequence = require('run-sequence'); //错误抛出的补丁->防止异常情况下停止程序 var plumber = require('gulp-plumber'); var handleErrors = function(error){ //继续监听 console.log("~~~错误:"+error); }; //情况以前目录 gulp.task('clean', function() { return gulp.src([ config.clean.src ]) //异常处理的补丁-打上这个后就算出错也不会终止程序 .pipe(plumber({ errorHandler:handleErrors })) //强制删除,当目录不在gulp运行目录下时需要配置 .pipe(clean({force: true})) }); //处理其它,默认将目录下的文件输出到部署目录 //正式项目中可以做压缩等等事件 gulp.task('dealOthers', function() { //去除svn,有时候项目中的.svn文件夹是不需要部署的 return gulp.src([config.other.src, '!' + config.other.svn.src]) .pipe(plumber({ errorHandler:handleErrors })) .pipe(gulp.dest(config.other.dest)); }); // 看守 gulp.task('watch', function() { console.log("路径:"+config.watch.src); // 看守所有位在 dist/ 目录下的档案,一旦有更动,便进行重整 // gulp.watch(config.watch.src).on('change', function(file) { // console.log("改动"); // }); gulp.watch(config.watch.src, ['default']); }); //注册一个默认任务-删除以前部署,然后重新部署 gulp.task('default', function(callback) { runSequence('clean', 'dealOthers', callback); });
手动编译源码.bat
编译源码,编译后出现build文件夹
实际应用中,可以将项目部署到对应的 web容器中,供外网访问
gulp default
注意,调用之前请先通过CD命令进入到项目目录
开启自动构建监听.bat
开启自动监听,改变源码的gulpWatch.json文件后即会自动构建
gulp watch
注意,调用之前请先通过CD命令进入到项目目录
本示例中的自动构建项目没有使用任何其它的组件,只是为了方便展示,平时项目中可能会针对不同的文件做不同处理,比如js压缩,css压缩,图片压缩等
请注意,前端项目中,缓存问题是一个比较重要的问题,这篇文章中强调了自动构建解决缓存问题的必要性
参考: gulp api
参考: gulp 插件使用