任务:
• 检查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]
网友评论