维护人:戴荔春 (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 插件使用