You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
layui/gulpfile.js

246 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
layui构建
*/
var pkg = require('./package.json');
var inds = pkg.independents;
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var minify = require('gulp-minify-css');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var header = require('gulp-header');
var del = require('del');
var gulpif = require('gulp-if');
var minimist = require('minimist');
var zip = require('gulp-zip');
//获取参数
var argv = require('minimist')(process.argv.slice(2), {
default: {
ver: 'all'
}
})
//注释
,note = [
'/** <%= pkg.realname %>-v<%= pkg.version %> <%= pkg.license %> License By <%= pkg.homepage %> */\n <%= js %>'
,{pkg: pkg, js: ';'}
]
//模块
,mods = 'laytpl,laypage,laydate,jquery,layer,element,upload,form,tree,table,carousel,util,flow,layedit,code'
//发行版本目录
,releaseDir = './release/zip/layui-v' + pkg.version
,release = releaseDir + '/layui'
//目标木
,destDir = function(ver){
return ver ? release : function(){
return argv.rc ? 'rc' : 'dist'
}();
}
//任务
,task = {
//压缩js模块
minjs: function(ver) {
ver = ver === 'open';
//可指定模块压缩eggulp minjs --mod layer,laytpl
var mod = argv.mod ? function(){
return '(' + argv.mod.replace(/,/g, '|') + ')';
}() : ''
,src = [
'./src/**/*'+ mod +'.js'
,'!./src/**/mobile/*.js'
,'!./src/lay/**/mobile.js'
,'!./src/lay/all.js'
,'!./src/lay/all-mobile.js'
]
,dir = destDir(ver);
//过滤 layim
if(ver || argv.open){
src.push('!./src/lay/**/layim.js');
}
return gulp.src(src).pipe(uglify())
.pipe(header.apply(null, note))
.pipe(gulp.dest('./'+ dir));
}
//打包PC合并版JS即包含layui.js和所有模块的合并
,alljs: function(ver){
ver = ver === 'open';
var src = [
'./src/**/{layui,all,'+ mods +'}.js'
,'!./src/**/mobile/*.js'
]
,dir = destDir(ver);
return gulp.src(src).pipe(uglify())
.pipe(concat('layui.all.js', {newLine: ''}))
.pipe(header.apply(null, note))
.pipe(gulp.dest('./'+ dir));
}
//打包mobile模块集合
,mobile: function(ver){
ver = ver === 'open';
var mods = 'layer-mobile,zepto,upload-mobile', src = [
'./src/lay/all-mobile.js'
,'./src/lay/modules/laytpl.js'
,'./src/**/mobile/{'+ mods +'}.js'
]
,dir = destDir(ver);
if(ver || argv.open){
src.push('./src/**/mobile/layim-mobile-open.js');
}
src.push((ver ? '!' : '') + './src/**/mobile/layim-mobile.js');
src.push('./src/lay/modules/mobile.js');
return gulp.src(src).pipe(uglify())
.pipe(concat('mobile.js', {newLine: ''}))
.pipe(header.apply(null, note))
.pipe(gulp.dest('./'+ dir + '/lay/modules/'));
}
//压缩css文件
,mincss: function(ver){
ver = ver === 'open';
var src = [
'./src/css/**/*.css'
,'!./src/css/**/font.css'
]
,dir = destDir(ver)
,noteNew = JSON.parse(JSON.stringify(note));
if(ver || argv.open){
src.push('!./src/css/**/layim.css');
}
noteNew[1].js = '';
return gulp.src(src).pipe(minify({
compatibility: 'ie7'
})).pipe(header.apply(null, noteNew))
.pipe(gulp.dest('./'+ dir +'/css'));
}
//复制iconfont文件
,font: function(ver){
ver = ver === 'open';
var dir = destDir(ver);
return gulp.src('./src/font/*')
.pipe(rename({}))
.pipe(gulp.dest('./'+ dir +'/font'));
}
//复制组件可能所需的非css和js资源
,mv: function(ver){
ver = ver === 'open';
var src = ['./src/**/*.{png,jpg,gif,html,mp3,json}']
,dir = destDir(ver);
if(ver || argv.open){
src.push('!./src/**/layim/**/*.*');
}
gulp.src(src).pipe(rename({}))
.pipe(gulp.dest('./'+ dir));
}
//复制发行的引导文件
,release: function(){
gulp.src('./release/doc/**/*')
.pipe(gulp.dest(releaseDir));
}
};
//清理
gulp.task('clear', function(cb) {
return del(['./'+ (argv.rc ? 'rc' : 'dist') +'/*'], cb);
});
gulp.task('clearRelease', function(cb) {
return del([releaseDir], cb);
});
gulp.task('minjs', task.minjs);
gulp.task('alljs', task.alljs);
gulp.task('mobile', task.mobile);
gulp.task('mincss', task.mincss);
gulp.task('font', task.font);
gulp.task('mv', task.mv);
gulp.task('release', task.release);
//发行版 gulp
gulp.task('default', ['clearRelease'], function(){
for(var key in task){
task[key]('open');
}
});
//完整任务 gulp all
gulp.task('all', ['clear'], function(){ //过滤 layimgulp all --open、rc 版gulp all --rc
for(var key in task){
task[key]();
}
});
//打包 layer 独立版
gulp.task('layer', function(){
var dir = './release/layer';
gulp.src('./src/css/modules/layer/default/*')
.pipe(gulp.dest(dir + '/src/theme/default'));
return gulp.src('./src/lay/modules/layer.js')
.pipe(gulp.dest(dir + '/src'));
});
//打包 layDate 独立版
gulp.task('laydate', function(){
var dir = './release/laydate';
gulp.src('./src/css/modules/laydate/default/{font,laydate}.css')
.pipe(concat('laydate.css', {newLine: '\n\n'}))
.pipe(gulp.dest(dir + '/src/theme/default'));
return gulp.src('./src/lay/modules/laydate.js')
.pipe(gulp.dest(dir + '/src'));
});
//打包 LayIM 版本
gulp.task('layim', function(){
var dir = './release/zip/layim-v'+ inds.layim;
gulp.src('./release/doc-layim/**/*')
.pipe(gulp.dest(dir))
gulp.src('./src/**/*')
.pipe(gulp.dest(dir + '/src'))
return gulp.src('./dist/**/*')
.pipe(gulp.dest(dir + '/dist'));
});