114 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /** | |||
|  |  * @fileoverview 自动构建程序 | |||
|  |  * @author Jin Yufeng | |||
|  |  */ | |||
|  | 
 | |||
|  | // 载入 gulp 插件
 | |||
|  | const gulp = require('gulp') | |||
|  | const htmlmin = require('gulp-htmlmin') | |||
|  | const babel = require('gulp-babel') | |||
|  | const uglify = require('gulp-uglify') | |||
|  | const cleanCss = require('gulp-clean-css') | |||
|  | const clean = require('gulp-clean') | |||
|  | const gulpif = require('gulp-if') | |||
|  | const plumber = require('gulp-plumber') | |||
|  | const size = require('gulp-size') | |||
|  | 
 | |||
|  | // 载入构建工具
 | |||
|  | const config = require('./tools/config') | |||
|  | const converter = require('./tools/converter') | |||
|  | const ifdef = require('./tools/ifdef') | |||
|  | const minifier = require('./tools/minifier') | |||
|  | const plugin = require('./tools/plugin') | |||
|  | 
 | |||
|  | // 载入环境信息
 | |||
|  | const isDev = process.argv.includes('--dev') | |||
|  | let platform = process.argv[3] | |||
|  | if (!platform) { | |||
|  |   throw Error('缺少平台信息') | |||
|  | } | |||
|  | platform = platform.substr(2) | |||
|  | 
 | |||
|  | /** | |||
|  |  * @description 清理文件夹 | |||
|  |  */ | |||
|  | gulp.task('clean', () => { | |||
|  |   return gulp.src(`${isDev ? 'dev' : 'dist'}/${platform === 'all' ? '' : platform + '/'}*`, { | |||
|  |     read: false, | |||
|  |     allowEmpty: true | |||
|  |   }) | |||
|  |     .pipe(clean()) | |||
|  | }) | |||
|  | 
 | |||
|  | /** | |||
|  |  * @description 生成原生组件包(含插件) | |||
|  |  * @returns {NodeJS.ReadWriteStream} | |||
|  |  */ | |||
|  | function packComp () { | |||
|  |   return gulp.src(['plugins/**/*', 'src/**/*'], { | |||
|  |     nodir: true | |||
|  |   }) | |||
|  |     // 公共处理
 | |||
|  |     .pipe(plumber()) // 错误处理
 | |||
|  |     .pipe(plugin.build(platform)) // 构建插件
 | |||
|  |     .pipe(ifdef(platform)) // 条件编译
 | |||
|  |     // wxml 处理
 | |||
|  |     .pipe(gulpif(file => file.extname === '.wxml', minifier.wxs())) // 压缩内联 wxs
 | |||
|  |     .pipe(gulpif(file => file.extname === '.wxml', htmlmin(config.htmlmin))) // 压缩 wxml
 | |||
|  |     .pipe(gulpif(file => file.extname === '.html', htmlmin(Object.assign({}, config.htmlmin, { // 压缩 html
 | |||
|  |       minifyCSS: true | |||
|  |     })))) | |||
|  |     // js 处理
 | |||
|  |     .pipe(gulpif(file => file.extname === '.js' && !file.stem.includes('.min') && (platform !== 'uni-app' || file.relative.includes('static')), babel(config.babel))) // es6 转 es5
 | |||
|  |     .pipe(gulpif(file => file.extname === '.js' && !file.stem.includes('.min') && !isDev && (platform !== 'uni-app' || file.relative.includes('static')), uglify(config.uglify))) // 压缩 js
 | |||
|  |     // wxss(css)处理
 | |||
|  |     .pipe(gulpif(file => file.extname.includes('ss'), cleanCss(config.cleanCss))) // 压缩 wxss
 | |||
|  |     .pipe(plugin.importCss()) // 引入插件中的 css 文件
 | |||
|  |     // json 处理
 | |||
|  |     .pipe(gulpif(file => file.extname === '.json', minifier.json())) // 压缩 json
 | |||
|  |     // 公共处理
 | |||
|  |     .pipe(converter(platform)) // 将微信端的代码转换到各个平台
 | |||
|  |     .pipe(gulpif(!isDev, size({ | |||
|  |       title: `${platform} 包生成完毕` | |||
|  |     }))) | |||
|  |     .pipe(gulp.dest(file => { | |||
|  |       return `${isDev ? 'dev' : 'dist'}/${platform}/${(platform === 'uni-app' && !file.relative.includes('components') && !file.relative.includes('static')) || (platform !== 'uni-app' && isDev) ? 'components/mp-html/' : ''}` | |||
|  |     })) | |||
|  | } | |||
|  | 
 | |||
|  | gulp.task('build', gulp.series('clean', packComp)) | |||
|  | 
 | |||
|  | /** | |||
|  |  * @description 生成原生示例项目 | |||
|  |  * @returns {NodeJS.ReadWriteStream} | |||
|  |  */ | |||
|  | function packDemo () { | |||
|  |   return gulp.src(['tools/demo/**/*', 'test/content.js'], { | |||
|  |     nodir: true | |||
|  |   }) | |||
|  |     .pipe(ifdef(platform)) | |||
|  |     .pipe(gulpif(platform !== 'uni-app', converter(platform))) | |||
|  |     .pipe(gulp.dest(`dev/${platform}/`)) | |||
|  | } | |||
|  | 
 | |||
|  | gulp.task('dev', gulp.series('clean', gulp.parallel(packComp, packDemo))) | |||
|  | 
 | |||
|  | /** | |||
|  |  * @description 监听文件变化 | |||
|  |  */ | |||
|  | gulp.task('watch-demo', () => { | |||
|  |   gulp.watch(['tools/demo/**/*', 'test/content.js']).on('all', (type, file) => { | |||
|  |     console.log(type + ':' + file) | |||
|  |     packDemo() | |||
|  |   }) | |||
|  | }) | |||
|  | 
 | |||
|  | gulp.task('watch-comp', () => { | |||
|  |   gulp.watch(['src/**/*', 'src/common/**/*', 'plugins/**/*']).on('all', (type, file) => { | |||
|  |     console.log(type + ':' + file) | |||
|  |     packComp() | |||
|  |   }) | |||
|  | }) | |||
|  | 
 | |||
|  | gulp.task('watch', gulp.parallel('watch-demo', 'watch-comp')) |