GulpDemo

Gulp Demo

安装gulp

npm install  gulp -g  #全局安装

查看是否安装成功

gulp -v  #查看版本号

初始化

npm init  #自动配置package.json

产生项目依赖(本地安装gulp插件)

npm install gulp --save-dev  #作为项目依赖(本地安装gulp插件)
#或者:
npm install gulp -D

在项目文件夹下,新建build文件夹images文件夹,src文件夹,index.html 新建gulpfile.js

mkdir images   #mkdir用于建文件夹
touch index.html   #touch用于创建html/js/css

基本结构如下:
Gulp

下面是我自己写的测试:
在 common.scss里面:

$baseColor:red;

在 app.scss里面:

@charset 'utf-8';
@import "./common.scss";
body{
    background: $baseColor;
}

在index.html里面:

    <!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="/build/prd/styles/app.css"/>
    </head>
    <body>
        hello Gulp!!!
        <script type="text/javascript" src="/build/prd/scripts/app.js"></script>
    </body>
</html>

common.js的代码:

module.exports = "hello,webPaccfkfsadgswww!!!!!!";

app.js的代码

var str = require('./common.js');

console.log(str);

####gulpfile.js

//引入gulp工具
var gulp = require('gulp');

//引入css预处理
var  sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');

//引入js模块化工具 gulp-webpack,获取js文件名模块,js压缩模块:viny-named
var named = require('vinyl-named');
var webpack = require('gulp-webpack');
var uglify = require('gulp-uglify');

//引入 fs url模块
var fs = require('fs');
var url = require('url');

//引入rev   revCollector
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');

//引入gulp-sequence 模块
var sequence = require('gulp-sequence');

//引入gulp-webserver 模块
var webserver = require('gulp-webserver');
//启动webserver 
gulp.task('webserver',function(){
    gulp.src('./')  //server读取的目录为当前目录
    .pipe(webserver({
        host:'localhost',
        port:8090,
        directoryListing:{
            enable:true,
            path:'./'   //显示项目根路径,以fekit样式显示
        },
        livereload:true,  //动态刷新

        //mock数据
        middleware:function(req,res,next){
            var urlObj = url.parse(req.url,true);
            switch(urlObj.pathname){
                case '/api/orders':
                    res.setHeader('Content-Type','application/json');
                    fs.readFile('./mock/list.json',function(err,data){
                        res.end(data);
                    });
                    return;
                case '/api/uesers':
                    res.setHeader('Content-Type','application/json');
                    rs.readFile('./mock/list.json',function(err,data){
                        res.end(data);
                    });
                    return;

            }
            next();
        }
    }))
});
    //编译scss
var cssFiles = [
    './src/styles/app.scss'
];
gulp.task('scss',function(){
    gulp.src(cssFiles)
    .pipe(sass().on('error',sass.logError))
    .pipe(minifyCss())
    .pipe(gulp.dest('./build/prd/syles'));
});

//js模块化合并和压缩
var jsFiles = [
    './src/scripts/app.js'
];
gulp.task('packjs',function(){
    gulp.src(jsFiles)
    .pipe(named())
    .pipe(webpack({
        output:{
            filename:'[name].js'
        },
        module:{
            loaders:[
                {
                    test:/\.js$/,
                    loader:'imports?define=>false'
                }
            ]
        }
    }))
    .pipe(uglify().on('error',function(err){
        console.log('\x07',err.lineNumber,err.message);
        return this.end();
    }))
    .pipe(gulp.dest('.build/prd/scripts'))
})
//版本号控制
var cssDistFiles = [
    './build/prd/styles/app.css'
];
var jsDistFiles = [
    './build/prd/scripts/app.js'
];
gulp.task('ver',function(){
    gulp.src(cssDistFiles)
    .pipe(rev())
    .pipe(gulp.dest('./build/prd/styles/'))
    .pipe(rev.manifest())
    .pipe(gulp.dest('./build/ver/styles/'));
    gulp.src(jsDistFiles)
    .pipe(rev())
    .pipe(gulp.dest('./build/prd/scripts/'))
    .pipe(rev.manifest())
    .pipe(gulp.dest('./build/ver/scripts/'));
});
gulp.task('html',function(){
    gulp.src(['./build/ver/**/*','./build/*.html'])
    .pipe(revCollector())
    .pipe(gulp.dest('./build/'));
})
gulp.task('min',sequence('copy-index',['ver','html']));//中括号是并行,否则为串行

//拷贝index.html到build文件夹
gulp.task('copy-index',function(){
    gulp.src('./index.html')
    .pipe(gulp.dest('./build'));
});

//拷贝images到build文件夹
gulp.task('copy-images',function(){
    gulp.src('./images/**/*')
    .pipe(gulp.dest('./build/images/'));
});

//侦测文件变化  执行相应任务
gulp.task('watch',function(){
    gulp.watch('./index.html',['copy-index']);
    gulp.watch('./images/*.*',['copy-images']);
    gulp.watch('./src/styles/*.{scss,css}',['scss','min']);
    gulp.watch('./src/scripts/*.js',['packjs'],'min');
});


//配置default    执行任务队列
//***default是按任务列表的顺序执行的
//gulp.task('default',['copy=index','copy-images','scss','webserver','packjs'],function(){
gulp.task('default',['watch','webserver'],function(){
    console.log('任务队列执行完毕!!!')
})

安装:

$ cnpm install gulp-rev gulp-rev-collector -D

将css和js 打包:

gulp ver

打包index.html

gulp min

下载gulp-sequence模块

cnpm install gulp-sequence -D