前端构建工具Gulp 常用的gulpfile配置文件

任务:
• 检查Javascript
• 编译Sass(或Less之类的)文件
• 合并Javascript
• 压缩并重命名合并后的Javascript

gulp只有五个方法: task,run,watch,src,和dest,在项目根目录新建一个js文件并命名为gulpfile.js,把下面的代码粘贴进去:

gulpfile.js

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

// 引入组件
var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');

// 检查脚本
gulp.task('lint', function() {
    gulp.src('./js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

// 编译Sass
gulp.task('sass', function() {
    gulp.src('./scss/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('./css'));
});

// 合并,压缩文件
gulp.task('scripts', function() {
    gulp.src('./js/*.js')
        .pipe(concat('all.js'))
        .pipe(gulp.dest('./dist'))
        .pipe(rename('all.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
});

// 默认任务
gulp.task('default', function(){
    gulp.run('lint', 'sass', 'scripts');

    // 监听文件变化
    gulp.watch('./js/*.js', function(){
        gulp.run('lint', 'sass', 'scripts');
    });
});

引入组件

var gulp = require('gulp');

var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');

这一步,我们引入了核心的gulp和其他依赖组件,接下来,分开创建lint, sass, scripts 和 default这四个不同的任务。

Lint任务

gulp.task('lint', function() {
    gulp.src('./js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

Link任务会检查js/目录下得js文件有没有报错或警告。

Sass任务

gulp.task('sass', function() {
    gulp.src('./scss/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('./css'));
});

Sass任务会编译scss/目录下的scss文件,并把编译完成的css文件保存到/css目录中。

Scripts 任务

gulp.task('scripts', function() {
    gulp.src('./js/*.js')
        .pipe(concat('all.js'))
        .pipe(gulp.dest('./dist'))
        .pipe(rename('all.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
});

scripts任务会合并js/目录下得所有得js文件并输出到dist/目录,然后gulp会重命名、压缩合并的文件,也输出到dist/目录。

default任务

gulp.task('default', function(){
    gulp.run('lint', 'sass', 'scripts');
    gulp.watch('./js/*.js', function(){
        gulp.run('lint', 'sass', 'scripts');
    });
});

这时,我们创建了一个基于其他任务的default任务。使用.run()方法关联和运行我们上面定义的任务,使用.watch()方法去监听指定目录的文件变化,当有文件变化时,会运行回调定义的其他任务。

现在,回到命令行,可以直接运行gulp任务了。

gulp

这将执行定义的default任务,换言之,这和以下的命令式同一个意思

gulp default

常用的配置文件

var gulp = require('gulp'),                         //基础库
    clean = require('gulp-clean');                  //清空文件夹
    cssmin = require('gulp-minify-css'),            //css压缩
    uglify= require('gulp-uglify'),                 //js压缩
    rev = require('gulp-rev'),                      //更改版本号
    revCollector = require('gulp-rev-collector'),   //gulp-rev的插件,用于html模板更改引用路径
    jshint = require('gulp-jshint'),                //js静态代码检查
    replace = require('gulp-replace'),
    concat = require('gulp-concat');                //合并文件


//要合并的js文件
var xk_jsArray = [
        'src/js/jquery.pin.js',
        'src/js/swiper/swiper.jquery.min.js',
        'src/js/xk-layer.js',
        'src/js/xk-searchSelect.js',
        'src/js/xk-tagSearchSelect.js',
        'src/js/fileUploader/xk-uploadFile.js',
        'src/js/loading/loading.js',
        'src/js/instant_reminder.js',
        'src/js/submit-button-control.js',
        'src/js/move_box.js',
        'src/js/user/loginout.js',
        'src/js/totop.js',
        'src/js/tagsConfiguration.js',
        'src/js/infoLayer.js'
    ];

var websocket_jsArray = [
    'src/js/imengine.js',
    'src/js/msgType.js',
    'src/js/dwr/dwr-exception.js',
    'src/js/system-msg/bulletin.js',
    'src/js/system-msg/no_read_message.js',
    'src/js/left_nav.js'
];    

//要合并的css文件
var cssArray = [
        'src/css/chat/chatnew.css',
        'src/css/skin/physician.css',
        'src/css/reset.css',
        'src/css/style.css',
        'src/css/followup/media_chat.css',
        'src/css/xk-drop.css',
        'src/css/swiper.css',
        'src/js/lib/umeditor/themes/default/css/umeditor.css',
        'src/css/fontawesome.css',
        'src/css/featureSpace.css'
    ];


//清空目标文件夹
gulp.task('clean',function(){
    //read参数为false表示不读取文件的内容
    return gulp.src('dist/',{read:false})
        .pipe(clean());
});

//将um编辑器库拷贝到目标文件夹
gulp.task('copy_js_umeditor',function(){
    return gulp.src('src/js/lib/umeditor/**/*')
        .pipe(gulp.dest('dist/js/lib/umeditor'));
});

//将时间编辑器拷贝到目标文件夹
gulp.task('copy_js_date',function(){
    return gulp.src('src/js/date-tool/**/*')
        .pipe(gulp.dest('dist/js/date-tool'));
});



gulp.task('replace_js_login',function(){
    gulp.src('src/js/user/login.js')
        .pipe(replace('bindLoginEvent();',''))
        .pipe(gulp.dest('src/js/user'));
});



gulp.task('replace_css_um',function(){
    gulp.src('src/js/lib/umeditor/themes/default/css/umeditor.css')
        .pipe(replace('../images/','../js/lib/umeditor/themes/default/images/'))
        .pipe(gulp.dest('src/js/lib/umeditor/themes/default/css'));
});


//合并css文件
gulp.task('css_concat',['replace_css_um'],function(){
    return gulp.src(cssArray)
        .pipe(concat('xk.css'))
        .pipe(gulp.dest('src/css'))
});

//压缩css文件、为css文件添加上版本号
gulp.task('css_min_version',['css_concat'],function(){
    return gulp.src('src/css/**/*.css')
        //压缩文件
        .pipe(cssmin({
            advanced: false,
            compatibility: 'ie7',
            keepBreaks: false
        }))
        //添加上版本号
        .pipe(rev())
        .pipe(gulp.dest('dist/css'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('dist/manifest/css'));
});

//合并js文件
gulp.task('js_concat_xk',['copy_js_umeditor','copy_js_date','replace_js_login'],function(){
    return gulp.src(xk_jsArray)
        .pipe(concat('xk.js'))
        .pipe(gulp.dest('src/js'));    

});

gulp.task('js_concat_websocket',function(){
    return gulp.src(websocket_jsArray)
        .pipe(concat('websocket.js'))
        .pipe(gulp.dest('src/js'));    

});



//压缩js文件,为js文件添加上版本号
gulp.task('js_min_version',['js_concat_xk','js_concat_websocket'],function(){
    return gulp.src('src/js/**/*.js')
        //压缩文件
        .pipe(uglify())
        //添加上版本号
        .pipe(rev())
        .pipe(gulp.dest('dist/js'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('dist/manifest/js'));
});

//为图片文件添加上版本号
gulp.task('image_version',function(){
    return gulp.src('src/images/**/*.{png,jpg,gif,ico}')
        .pipe(rev())
        .pipe(gulp.dest('dist/images'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('dist/manifest/images'));
});

//html模板更改引用路径
gulp.task('html_replace',['css_min_version','js_min_version','image_version'],function(){
    return gulp.src(['dist/manifest/**/*.json','src/page/**/*.jsp'])
        .pipe(revCollector({
            replaceReved:true
        }))
        .pipe(gulp.dest('dist/page'));
});


//默认执行任务
gulp.task('default',['clean'],function(){
    gulp.start('html_replace');
});

保存方便常规项目使用时翻阅,文章摘自:
[segmentfault]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容

  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,437评论 1 32
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    井皮皮阅读 1,294评论 0 10
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    小裁缝sun阅读 926评论 0 3
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    依依玖玥阅读 3,152评论 7 55
  • 安装Gulp首先需要安装Node.js,并在控制台输入$ npm install gulp -gMac端需要写成$...
    LaBaby_阅读 913评论 0 1