构建工具:gulp(基础配置)

这两天看着视频,跟着一个老司机在做一个基于angular框架的webapp,老司机用的构建工具是gulp,

虽然他不反对用webpack,但是我也想接触一下gulp,就被他带上车了,也写这篇文来记录一下我的过程吧

 

我也是初次接触gulp,之前用过webpack,下面就从项目里安装好gulp插件开始写吧

除了安装gulp还需要安装以下常用的插件(都是我这个项目里所要用到的)

 

然后本项目的包管理器是bower,所以下面也会出现从bower的文件目录下拷贝模块的情况

在此再解释一下我的项目文件结构是如何安排的

'src'文件夹用于存放源码,'build'文件夹用于存放开发环境的目录,'build'文件夹用于存放生产环境的目录

 

好了,然后进入重点,开始配置gulp,

在项目目录下创建一个js文件,名叫gulpfile.js,然后进入编辑,下面就是以代码+注释的形式去介绍具体配置了

 

// 配置gulp
var gulp = require('gulp');//最重要的模块引入
//引入这个模块的目的:简化输入插件前缀的操作
var $ = require('gulp-load-plugins')();//注意:需要实例化()
var open = require('open');

// 封装一个对象来简化路径输入
var app = {
    srcPath : 'src/',
    devPath : 'build/',
    prdPath : 'dist/'
};

// 开始定义任务

// 拷贝bower里的文件到开发目录和生产目录中
gulp.task('lib',function(){//定义任务的api叫task
    // 在回调函数中写逻辑
    gulp.src('bower_components/**/*.js')//深度遍历文件
    // 使用链式操作,用dest方法去拷贝
    .pipe(gulp.dest(app.devPath + 'vendor'))
    .pipe(gulp.dest(app.prdPath + 'vendor'))
    // 通知服务器来刷新游览器
    .pipe($.connect.reload());
});

// 拷贝src里的文件到开发目录和生产目录中
gulp.task('html',function(){
    gulp.src(app.srcPath + '**/*.html')
    .pipe(gulp.dest(app.devPath))
    .pipe(gulp.dest(app.prdPath))
    .pipe($.connect.reload());
});

// 拷贝data里的json(假数据)到开发目录和生产目录中
gulp.task('json',function(){
    gulp.src(app.srcPath + 'data/**/*.json')
    .pipe(gulp.dest(app.devPath + 'data'))
    .pipe(gulp.dest(app.prdPath + 'data'))
    .pipe($.connect.reload());
});

gulp.task('less',function(){
    gulp.src(app.srcPath + 'style/index.less')
    // 进行编译
    .pipe($.less())
    // 编译完成后放入开发目录
    .pipe(gulp.dest(app.devPath + 'css'))
    // 进行压缩
    .pipe($.cssmin())
    // 完成后放入生产环境
    .pipe(gulp.dest(app.prdPath + 'css'))
    .pipe($.connect.reload());
});

gulp.task('js',function(){
    gulp.src(app.srcPath + 'script/**/*.js')
    // 进行合并,合并到index.js
    .pipe($.concat('index.js'))
    // 完成后放入开发目录
    .pipe(gulp.dest(app.devPath + 'js'))
    // 进行压缩
    .pipe($.uglify())
    // 完成后放入生产环境
    .pipe(gulp.dest(app.prdPath + 'js'))
    .pipe($.connect.reload());
});

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());
});

// 定义一个总任务,去完成项目的打包
gulp.task('build',['image','js','less','lib','html','json']);

// 定义一个删除开发目录和生产目录的任务
gulp.task('clean', function(){
    gulp.src([app.prdPath,app.devPath])
    .pipe($.clean());
});

// 定义一个启动服务器的任务
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']);
});

// 定义一个默认的任务,在控制台输入gulp就会自动执行serve任务
gulp.task('default',['serve']);

OK了,这时候在控制台输入gulp就会弹出游览器,地址就是本地的服务器+定义端口,并会随着源代码的修改而自动刷新,就像webpack-server一样。

最后再说一下需要注意的:

1.这个本地服务器自动刷新功能是不支持老IE的

2在启动本地服务器后如果要在控制台退出,可以输入control+c(同webpack-server)

posted @ 2017-09-18 18:24  怪兽metal  阅读(489)  评论(0编辑  收藏  举报