filesbox/miniprogram/FilesBox/node_modules/mp-html/gulpfile.js
2023-09-21 10:23:31 +08:00

114 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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
// wxsscss处理
.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'))