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

2017-08-15  本文已影响88人  Amfishers

任务:
• 检查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]

上一篇下一篇

猜你喜欢

热点阅读