gulpfile.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /**
  2. layui构建
  3. */
  4. var pkg = require('./package.json');
  5. var gulp = require('gulp');
  6. var uglify = require('gulp-uglify');
  7. var minify = require('gulp-minify-css');
  8. var concat = require('gulp-concat');
  9. var rename = require('gulp-rename');
  10. var header = require('gulp-header');
  11. var del = require('del');
  12. var gulpif = require('gulp-if');
  13. var minimist = require('minimist');
  14. var zip = require('gulp-zip');
  15. //获取参数
  16. var argv = require('minimist')(process.argv.slice(2), {
  17. default: {
  18. ver: 'all'
  19. }
  20. })
  21. //注释
  22. ,note = [
  23. '/** <%= pkg.name %>-v<%= pkg.version %> <%= pkg.license %> License By <%= pkg.homepage %> */\n <%= js %>'
  24. ,{pkg: pkg, js: ';'}
  25. ]
  26. //模块
  27. ,mods = 'laytpl,laypage,laydate,jquery,layer,element,upload,form,tree,table,carousel,util,flow,layedit,code'
  28. //发行版本目录
  29. ,releaseDir = './release/layui-v' + pkg.version
  30. ,release = releaseDir + '/layui'
  31. //任务
  32. ,task = {
  33. //压缩js模块
  34. minjs: function(ver) {
  35. ver = ver === 'open';
  36. //可指定模块压缩,eg:gulp minjs --mod layer,laytpl
  37. var mod = argv.mod ? function(){
  38. return '(' + argv.mod.replace(/,/g, '|') + ')';
  39. }() : ''
  40. ,src = [
  41. './src/**/*'+ mod +'.js'
  42. ,'!./src/**/mobile/*.js'
  43. ,'!./src/lay/**/mobile.js'
  44. ,'!./src/lay/all.js'
  45. ,'!./src/lay/all-mobile.js'
  46. ]
  47. ,dir = ver ? release : 'dist';
  48. //过滤 layim
  49. if(ver || argv.open){
  50. src.push('!./src/lay/**/layim.js');
  51. }
  52. return gulp.src(src).pipe(uglify())
  53. .pipe(header.apply(null, note))
  54. .pipe(gulp.dest('./'+ dir));
  55. }
  56. //打包PC合并版JS,即包含layui.js和所有模块的合并
  57. ,alljs: function(ver){
  58. ver = ver === 'open';
  59. var src = [
  60. './src/**/{layui,all,'+ mods +'}.js'
  61. ,'!./src/**/mobile/*.js'
  62. ]
  63. ,dir = ver ? release : 'dist';
  64. return gulp.src(src).pipe(uglify())
  65. .pipe(concat('layui.all.js', {newLine: ''}))
  66. .pipe(header.apply(null, note))
  67. .pipe(gulp.dest('./'+ dir));
  68. }
  69. //打包mobile模块集合
  70. ,mobile: function(ver){
  71. ver = ver === 'open';
  72. var mods = 'layer-mobile,zepto,upload-mobile', src = [
  73. './src/lay/all-mobile.js'
  74. ,'./src/lay/modules/laytpl.js'
  75. ,'./src/**/mobile/{'+ mods +'}.js'
  76. ]
  77. ,dir = ver ? release : 'dist';
  78. if(ver || argv.open){
  79. src.push('./src/**/mobile/layim-mobile-open.js');
  80. }
  81. src.push((ver ? '!' : '') + './src/**/mobile/layim-mobile.js');
  82. src.push('./src/lay/modules/mobile.js');
  83. return gulp.src(src).pipe(uglify())
  84. .pipe(concat('mobile.js', {newLine: ''}))
  85. .pipe(header.apply(null, note))
  86. .pipe(gulp.dest('./'+ dir + '/lay/modules/'));
  87. }
  88. //压缩css文件
  89. ,mincss: function(ver){
  90. ver = ver === 'open';
  91. var src = ['./src/css/**/*.css']
  92. ,dir = ver ? release : 'dist'
  93. ,noteNew = JSON.parse(JSON.stringify(note));
  94. if(ver || argv.open){
  95. src.push('!./src/css/**/layim.css');
  96. }
  97. noteNew[1].js = '';
  98. return gulp.src(src).pipe(minify({
  99. compatibility: 'ie7'
  100. })).pipe(header.apply(null, noteNew))
  101. .pipe(gulp.dest('./'+ dir +'/css'));
  102. }
  103. //复制iconfont文件
  104. ,font: function(ver){
  105. ver = ver === 'open';
  106. var dir = ver ? release : 'dist';
  107. return gulp.src('./src/font/*')
  108. .pipe(rename({}))
  109. .pipe(gulp.dest('./'+ dir +'/font'));
  110. }
  111. //复制组件可能所需的非css和js资源
  112. ,mv: function(ver){
  113. ver = ver === 'open';
  114. var src = ['./src/**/*.{png,jpg,gif,html,mp3,json}']
  115. ,dir = ver ? release : 'dist';
  116. if(ver || argv.open){
  117. src.push('!./src/**/layim/**/*.*');
  118. }
  119. gulp.src(src).pipe(rename({}))
  120. .pipe(gulp.dest('./'+ dir));
  121. }
  122. //复制发行的引导文件
  123. ,release: function(){
  124. gulp.src('./release/doc/**/*')
  125. .pipe(gulp.dest(releaseDir));
  126. }
  127. };
  128. //清理
  129. gulp.task('clear', function(cb) {
  130. return del(['./dist/*'], cb);
  131. });
  132. gulp.task('clearRelease', function(cb) {
  133. return del([releaseDir], cb);
  134. });
  135. gulp.task('minjs', task.minjs);
  136. gulp.task('alljs', task.alljs);
  137. gulp.task('mobile', task.mobile);
  138. gulp.task('mincss', task.mincss);
  139. gulp.task('font', task.font);
  140. gulp.task('mv', task.mv);
  141. gulp.task('release', task.release);
  142. //开源版
  143. gulp.task('default', ['clearRelease'], function(){ //命令:gulp
  144. for(var key in task){
  145. task[key]('open');
  146. }
  147. });
  148. //压缩
  149. gulp.task('zip', function(){
  150. gulp.src('./release/layui-v' + pkg.version + '/**/*')
  151. .pipe(zip('layui-v' + pkg.version + '.zip'))
  152. .pipe(gulp.dest('./release'));
  153. });
  154. //打包LayIM
  155. gulp.task('layim', function(){
  156. var dir = './release/layui.layim-v'+ pkg.layimV;
  157. gulp.src('./release/doc-layim/**/*')
  158. .pipe(gulp.dest(dir))
  159. gulp.src('./src/**/*')
  160. .pipe(gulp.dest(dir + '/src'))
  161. return gulp.src('./dist/**/*')
  162. .pipe(gulp.dest(dir + '/dist'));
  163. });
  164. //完整任务
  165. gulp.task('all', ['clear'], function(){ //命令:gulp all,过滤layim:gulp all --open
  166. for(var key in task){
  167. task[key]();
  168. }
  169. });