gulp构建一个项目

介绍:这篇文章总结了使用gulp构建一个项目的详细过程。包括开发环境搭建,构建项目并用于生产部署。

gulp自动化构建工具具备以下特点:
基于流、任务化
常用API:src、dest、watch、task、pipe

一.安装

1.安装gulp:(注意这里默认大家已经安装了npm和nodejs)
新建项目文件,cmd切换到项目目录下,这里我新建了项目文件webapp

安装全局gulp:

npm i -g gulp

2.接下来安装node依赖文件
首先用npm初始化项目配置文件:

npm init

然后命令行一直回车就行,配置文件之后可以更改

3.作为项目的开发依赖(devDependencies)安装:在当前目录安装gulp
在当前目录安装gulp:

npm i --save-dev gulp

–save-dev的意思是将当前文件保存到配置文件当中,nodejs模块保存到packge.json文件当中,当我们需要项目保存到git仓库的时候,只需要保存packge.json文件到git仓库就行。当别人需要编译你的项目,只要npm i就可以拿到你的项目配置信息。

我们可以看下package.json文件:在依赖模块添加了gulp信息

然后我们看项目文件夹webapp的node_modules文件下多了个gulp文件夹,这个就是我们刚添加的gulp模块

4.扩展插件–在当前项目文件webapp目录下,安装gulp依赖文件。
安装命令:

npm i --save--dev 插件名称

需要安装的gulp插件:

gulp-clean  
gulp-concat(文件合并)  
gulp-connect  
gulp-minify-html(html压缩)  
gulp-minify-css(CSS压缩)
gulp-cssmin(CSS压缩)(任选一个)  
gulp-jshint(JS代码检查)
gulp-imagemin(压缩图片)  
gulp-less(编译Less)    
gulp-sass(编译Sass)
gulp-load-plugins  
gulp-uglify (JS压缩)
gulp-livereload(自动刷新)
open

比如说:

npm i --save--dev gulp-clean

如果你不想一个个安装,有个批量安装的小窍门:

npm i --save--dev gulp-clean gulp-concat gulp-connect ...

各个模块之间以空格隔开。
安装好之后呢,我们在package.json文件里可以看到这些依赖插件

5.进行配置
在webapp项目根目录下,新建gulpfile.js文件,在文件中写入如下配置代码:

var gulp = require('gulp');          //引入模块
var $ = require('gulp-load-plugins');  //有了这个模块,其他的模块可以以$符号引入
var open = require('open');         //引入open

var app = {//声明一个全局变量,定义项目的路径
    srcPath : 'src/',      //源文件
    devPath : 'build/',   //开发环境--整合之后的路径
    prdPath : 'dist/'     //生成部署
};

6.拷贝命令
定义任务的API,第二个参数是一个回调函数,在回调函数里我们写入逻辑操作代码

gulp.task('任务名',function () {
    gulp.路径(路径)        //读取文件
    .pipe(...操作文件)
    .pipe(gulp.dest(目录))    //生成文件
})

二.使用

应用实例:
1.拷贝HTML:
a.新建文件夹src存放源代码

b.新建完之后,我们在gulpfile.js文件下敲入如下代码进行拷贝html:(前提之前已配置好各个路径)

gulp.task('html',function () {
    gulp.src(app.srcPath + '**/*.html')
    .pipe(gulp.dest(app.devPath))  //pipe是一个API  写文件的API--dest 拷贝到app.devPath + 'vendeor'
    .pipe(gulp.dest(app.prdPath))     //生成
    .pipe($.connect.reload());//通知服务器刷新浏览器,ie8不支持
})

c.可以测试下,命令行打开,在项目路径下,输入

gulp html

d.执行成功后可以看到项目文件下生成了新的文件夹build

2.拷贝第三方依赖库lib:前提是安装好bower并且用bower安装了第三方依赖文件(本例使用Bower安装了Angular,在bower_componets文件下)
题外话:全局安装bower:

npm install bower -g

Bower安装第三方依赖Angular:

bower install --save angular

开始拷贝JS:
a.在gulpfile.js文件下敲入如下代码进行拷贝js:(前提之前已配置好各个路径)

gulp.task('lib',function () {
    gulp.src('bower_components/**/*.js')
    .pipe(gulp.dest(app.devPath + 'vendor'))
    .pipe(gulp.dest(app.prdPath + 'vendor'))
    .pipe($.connect.reload());//通知服务器刷新浏览器,ie8不支持
})

b.命令行进入项目路径,执行命令:

gulp lib

c.如果在build目录下生成vendor文件夹及其angular文件,表示成功。

3.拷贝CSS
a.src目录新建目录style,新建文件index.less和1.less,在两个文件编写测试代码。

b.然后在gulpfile.js文件新建任务:

gulp.task('less',function () {
    gulp.src(app.srcPath + 'style/index.less')
        .pipe($.less())                     //别忘了less后的括号
        .pipe(gulp.dest(app.devPath + 'css'))
        .pipe($.cssmin())                  //压缩
        .pipe(gulp.dest(app.prdPath + 'css'))
        .pipe($.connect.reload());//通知服务器刷新浏览器,ie8不支持
});

c.运行,在命令行输入

gulp less

4.拷贝JS
同样的套路:
a.src下新建目录script,在script里新建文件1.js和2.js,随便写点测试代码。

b.新建gulp任务:
在gulpfile.js文件下添加如下一段代码即可:

gulp.task('js',function () {
    gulp.src(app.srcPath + 'script/**/*.js')
        .pipe($.concat('index.js'))            //生成
        .pipe(gulp.dest(app.devPath + 'js'))    //写入开发环境
        .pipe($.uglify())                    //压缩
        .pipe(gulp.dest(app.prdPath + 'js'))    //部署到生产环境
        .pipe($.connect.reload());//通知服务器刷新浏览器,ie8不支持
});

c.运行
在命令行输入:

gulp js

d.查看运行结果,在生产环境dist目录下生成js文件夹及其index.js文件。

5.拷贝image
套路是一样的啊,
a.在src里新建image目录,在该目录里新建一张图片,比如1.png
b.新建gulp任务,在gulpfile.js文件下添加如下代码:

gulp.task('image',function () {
    gulp.src(app.srcPath + 'image/**/*')           //读取文件
        .pipe(gulp.dest(app.devPath + 'image'))        //拷贝到开发环境
        .pipe($.imagemin())                     //压缩图片
        .pipe(gulp.dest(app.prdPath + 'image'))    //部署到生产环境
        .pipe($.connect.reload());//通知服务器刷新浏览器,ie8不支持
});

c.项目路径下运行下:

gulp image

d.查看运行结果,在生产环境目录dist里生产image目录及其文件

6.在我们部署到生产环境之后,往往需要清除build和dist 目录,避免出现旧的影响新的。这时候就需要新建一个清除任务:
在gulpfile.js文件下添加如下代码块:

gulp.task('clean',function () {  //清除
    gulp.src([app.devPath,app.prdPath]) //要删除目录
    .pipe($.clean());
});

运行:

gulp clean

7新建gulp总任务。在我们真正部署的时候,往往通过新建一个gulp总任务来执行之前的所有打包压缩任务,减少繁琐操作,代码如下:

gulp.task('build',['image','js','less','lib','html','json']);  //总任务  执行gulp build即可

运行:

gulp build

8新建服务—-自动化启动总任务build和服务器
在gulpfile.js文件下,敲入如下新建服务代码:

//新建服务
gulp.task('serve',['build'],function () {
    $.connect.server({        //启动一个服务器
        root:[app.devPath],   //从开发目录下读取
        livereload:true,      //自动刷新浏览器,ie不支持
        port:1234           //端口
    });
    open('http://localhost:1234');   //自动打开网址,打开浏览器

    //监听
    gulp.watch('bower_components/**/*',['lib']);
    gulp.watch(app.srcPath + '**/*.html',['html']);
    gulp.watch(app.srcPath + 'data/**/*.json',['json']);
    gulp.watch(app.srcPath + 'style/**/*.less',['less']);
    gulp.watch(app.srcPath + 'script/**/*.js',['js']);
    gulp.watch(app.srcPath + 'image/**/*',['image']);
});

8.1有一个小技能,我们可以新建一个gulp默认任务,让它运行gulp的时候自动启动服务serve:

//建立默认启动任务
gulp.task('default',['serve']);//default 依赖serve

可以测试一下,命令行敲入:

gulp

然后等待运行结束,浏览器会自动打开网址:http://localhost:1234/
你可以在src目录下的index.html页面敲入代码:hello world!
此时你会发现网页自动刷新了

当一个程序员打出hello world时就像中乐透一样哈哈:)