/*******************
* 后台管理系统、公司网站分为一组;
* 代理商、经销商、测试系统分为一组(由于测试系统依赖app里面的公共文件,所以测试系统后续开发尽量不要和app内部文件耦合);
* 终端用户分为一组,完全要做到:【其他系统发布不会造成对用户系统的影响】;
*
* 特殊的:公共组件,主要是手机网页用的多,后台管理系统用的少,但是经销商和终端用户又是分开的,导致经销商和终端用户的发布会相互影响,所以尽量不要修改!
* ********************/
//日志
var log4js = require('log4js')
var log4jsConfig = {
appenders: {
out: { type: 'stdout' }, //设置是否在控制台打印日志
info: { type: 'file', filename: './var/logs/gulp-history.log' },
},
categories: {
default: { appenders: ['out', 'info'], level: 'info' }, //去掉'out'。控制台不打印日志
},
}
if (process.platform.indexOf('linux') > -1) {
log4jsConfig.appenders.info.filename = '/var/log/gulp-history.log'
}
log4js.configure(log4jsConfig)
var LogFile = log4js.getLogger('info')
const { series, parallel } = require('gulp') //gulp主组件
//引入gulp和gulp插件
var gulp = require('gulp') //gulp主组件
var babel = require('gulp-babel') //如果某些JS用了ES6语法,就需要转换
var changed = require('gulp-changed')
var htmlmin = require('gulp-htmlmin') //html压缩组件
var jshint = require('gulp-jshint') //js语法检查
var gulpAutoprefixer = require('gulp-autoprefixer')
var sass = require('gulp-sass')(require('sass')) // 编译 sass
var less = require('gulp-less')
var minifyCss = require('gulp-minify-css') //压缩CSS为一行;
var uglify = require('gulp-uglify') //js文件压缩
var rev = require('gulp-rev') //对文件名加MD5后缀
var revCollector = require('gulp-rev-collector') //路径替换
var gulpRemoveHtml = require('gulp-remove-html') //标签清除,参考:https://www.npmjs.com/package/gulp-remove-html
var removeEmptyLines = require('gulp-remove-empty-lines') //清除空白行,参考:https://www.npmjs.com/package/gulp-remove-empty-lines
var rename = require('gulp-rename')
var gulpSequence = series
var clean = require('gulp-clean') //清除文件插件,参考:https://github.com/teambition/gulp-clean
var modify = require('gulp-modify') //文件内容修改
var inject = require('gulp-inject-string')
/*************************************************开发环境**************************************************/
var browserSync = require('browser-sync').create()
// 文档 https://browsersync.io/docs/options
//复制模拟数据接口
gulp.task('copy-mock', function () {
return gulp.src('static/mock/**/*').pipe(gulp.dest(buildBasePath + 'mock'))
})
// 开发时,拷贝文件到dev目录
function devCopyChange() {
// 拷贝时排除需要sass编译的文件、排除doc文档(因为已经不需要了)、排除babel
return gulp
.src([
'static/**/*',
'!**/custom/css/*.css',
'!**/app/css/*.css',
'!**/pages/css/user-common.css',
'!**/custom/css/*.css',
'!**/custom/scss/*.*',
'!**/app/doc/*.*',
//排除babel编译的部分
'!static/app/js/*.js',
'!static/components/custom/js/*.js',
])
.pipe(changed('dist_dev')) //只拷贝变动过的文件
.pipe(gulp.dest('dist_dev'))
}
function sassCommonPipe(src) {
return src
.pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError)) // sass只会解析scss格式的import文件,不会解析css
.pipe(autoprefixer())
.pipe(minifyCss()) //压缩css,minifyCss会先把所有的@import url()外部进入的css文件递归插入,如 iconfont.css
}
// 开发时,自动编译sass并更新到dev目录,不用压缩!
function devCustomRevCss(done) {
//公共样式
sassCommonPipe(gulp.src('static/components/custom/scss/index.scss'))
.pipe(
rename(function (path) {
path.basename = 'common' //必须重命名,common文件名全局独享,这样revCollector才能正确执行
})
)
.pipe(gulp.dest('dist_dev/components/custom/css'))
//经销商、代理商、测试的样式
sassCommonPipe(gulp.src('static/components/custom/scss/dealer.scss'))
.pipe(
rename(function (path) {
path.basename = 'xyf.common.min'
})
)
.pipe(gulp.dest('dist_dev/app/css'))
//终端用户的样式
sassCommonPipe(gulp.src('static/components/custom/scss/user.scss'))
.pipe(
rename(function (path) {
path.basename = 'user-common'
})
)
.pipe(gulp.dest('dist_dev/pages/css'))
//支付后广告样式
sassCommonPipe(gulp.src('static/components/custom/scss/third-receipt.scss'))
.pipe(
rename(function (path) {
path.basename = 'third-receipt'
})
)
.pipe(gulp.dest('dist_dev/public/css'))
done()
}
// 开发时,自动编译less并更新到dist_dev目录,不用压缩!
function devManageLess() {
console.log('less编译中')
return gulp.src('static/1.0/css/less/app.less').pipe(less()).pipe(autoprefixer()).pipe(gulp.dest('dist_dev/1.0/css'))
}
function devEs6App() {
return gulp
.src('static/app/js/*.js')
.pipe(babel()) //es6转es5
.pipe(gulp.dest('dist_dev/app/js'))
}
function devEs6Custom() {
return gulp
.src('static/components/custom/js/*.js')
.pipe(babel()) //es6转es5
.pipe(gulp.dest('dist_dev/components/custom/js'))
}
// 监听变动文件,然后复制或是编译
gulp.task(
'dev-watch',
parallel([devCopyChange, devCustomRevCss, devManageLess, devEs6App, devEs6Custom], function (done) {
console.log(
'---------已监听大部分业务js和html,排除监听公共库、公司网站代码、图片,如果变动需要重启命令即可自动拷贝-------------'
)
// { interval: 1500 }设置 监听频率,可以减少CPU占用
// 监听所有js html,以及1.0的css,无后缀名的接口文件;排除angular-mod (基本不改动),排除第三方库(如有新增库,重启命令即可拷贝过去),排除后可以减少cpu的占用(i5 4590 12%占用,全部监听占用30%左右)
gulp.watch(
[
'static/**/*.js',
'static/1.0/**/*.css',
'static/**/*.html',
'static/mock/**/*',
'static/wifi/*',
//排除babel编译的部分
'!static/app/js/*.js',
'!static/components/custom/js/*.js',
//排除公共库或是基本不改的代码
'!static/1.0/vendor/**/*.*',
'!static/components/lib/**/*.*',
'!static/angular-mod/**/*.*',
],
devCopyChange
)
// 监听sass文件,并编译
gulp.watch(['static/components/custom/scss/**/*.scss', 'static/components/custom/css/*.css'], devCustomRevCss)
// 监听less文件,并编译
gulp.watch(['static/1.0/**/*.less'], devManageLess)
// 监听某些JS文件,可能会有ES6,所以编译
gulp.watch(['static/app/js/*.js'], devEs6App)
gulp.watch(['static/components/custom/js/*.js'], devEs6Custom)
done()
})
)
//开发: 启动服务器
gulp.task(
'run-dev',
series(['dev-watch'], function (done) {
browserSync.init({
server: {
baseDir: 'dist_dev',
},
ghostMode: false, //不需要同步页面行为,不然无法同时打开多个不同的页面
notify: false, //禁用浏览器的通知元素
open: false, // 不需要自动打开浏览器
host: '127.0.0.1',
port: 80,
// 前端开发时,模拟POST 避免404
middleware: function (req, res, next) {
if (req.method.toUpperCase() == 'POST') {
req.method = 'GET'
}
next()
},
})
done()
})
)
module.exports.dev = series('run-dev')
/*************************************************生产环境**************************************************/
// 启动服务器:主要是验证一下dist对不对,需要复制模拟数据
gulp.task(
'preview',
series(['copy-mock'], function () {
console.log('---------即将验证dist目录,请确保代码已编译-------------')
browserSync.init({
server: {
baseDir: 'dist',
},
open: 'external',
host: '127.0.0.1',
port: 80,
//模拟POST 避免404
middleware: function (req, res, next) {
if (req.method.toUpperCase() == 'POST') {
req.method = 'GET'
}
next()
},
})
})
)
var buildBasePath = 'dist/' //构建输出的目录
if (process.argv[4]) {
buildBasePath = process.argv[4] + '/'
}
// css浏览器兼容修复,如加webkit
function autoprefixer() {
return gulpAutoprefixer({
overrideBrowserslist: ['Chrome > 31', 'Android 4.1', 'iOS 7.1'],
cascade: true, //是否美化属性值 默认:true 像这样:
//-webkit-transform: rotate(45deg);
// transform: rotate(45deg);
remove: true, //是否去掉不必要的前缀 默认:true
})
}
/**********旧的dist清除******************/
//删除全部dist文件
gulp.task('clean:Build', function (cb) {
return gulp.src(buildBasePath, { read: false, allowEmpty: true }).pipe(clean())
})
//删除后台管理系统
gulp.task('clean:manage', function (cb) {
return gulp
.src([buildBasePath + '1.0/', buildBasePath + 'admaster/', buildBasePath + 'administrator/'], {
read: false,
allowEmpty: true,
})
.pipe(clean())
})
//删除公共组件dist
gulp.task('clean:common', function (cb) {
return gulp.src([buildBasePath + 'components/'], { read: false, allowEmpty: true }).pipe(clean())
})
//删除经销商、代理商dist文件
gulp.task('clean:dealer', function (cb) {
return gulp.src([buildBasePath + 'app/', buildBasePath + 'agents/'], { read: false, allowEmpty: true }).pipe(clean())
})
//测试系统dist文件
gulp.task('clean:test', function (cb) {
return gulp.src([buildBasePath + 'test/'], { read: false, allowEmpty: true }).pipe(clean())
})
//weknow dist文件
gulp.task('clean:weknow', function (cb) {
return gulp.src([buildBasePath + 'weknow/'], { read: false, allowEmpty: true }).pipe(clean())
})
//public dist文件
gulp.task('clean:public', function (cb) {
return gulp.src([buildBasePath + 'public/'], { read: false, allowEmpty: true }).pipe(clean())
})
//help dist文件
gulp.task('clean:help', function (cb) {
return gulp.src([buildBasePath + 'help/'], { read: false, allowEmpty: true }).pipe(clean())
})
//删除终端用户dist文件
gulp.task('clean:enduser', function (cb) {
return gulp.src([buildBasePath + 'pages/'], { read: false, allowEmpty: true }).pipe(clean())
})
/****************不需要编译的文件拷贝*********************/
//复制公共文件,如系统图标,公共组件,等不容易变更的文件,主要是经销商、代理商、终端用户用到,后台管理系统几乎不用
gulp.task('copy_common_1', function () {
//拷贝前台公共组件字体
return gulp.src(['static/components/fonts/*.*']).pipe(gulp.dest(buildBasePath + 'components/fonts'))
})
gulp.task('copy_common_2', function () {
//拷贝前台公共组件js和css
return gulp.src(['static/components/lib/**/*.*']).pipe(gulp.dest(buildBasePath + 'components/lib'))
})
gulp.task('copy_common_3', function () {
//拷贝前台公共组件媒体文件
return gulp.src(['static/components/custom/voice/*.*']).pipe(gulp.dest(buildBasePath + 'components/custom/voice'))
})
gulp.task('copy_common_4', function () {
//拷贝全局网页缺省logo
return gulp.src(['static/favicon.ico', 'static/robots.txt']).pipe(gulp.dest(buildBasePath + ''))
})
gulp.task('copy-common', gulpSequence(['copy_common_1'], ['copy_common_2'], ['copy_common_3'], ['copy_common_4']))
//复制管理系统文件
gulp.task('copy_manage_1', function () {
//拷贝后台管理系统全部文件---【使用base=static可以在拷贝文件时候保留路径】
return gulp
.src(['static/1.0/fonts/**/*', 'static/1.0/img/**/*', 'static/1.0/vendor/**/*', 'static/1.0/favicon.png'], {
base: 'static/',
})
.pipe(gulp.dest(buildBasePath))
})
gulp.task('copy-manage', gulpSequence(['copy_manage_1']))
//复制经销商、代理商文件、测试系统文件(暂无)
gulp.task('copy_dealer_1', function () {
//拷贝经销商说明文档
return gulp.src('static/app/doc/**/*').pipe(gulp.dest(buildBasePath + 'app/doc'))
})
gulp.task('copy_dealer_2', function () {
//拷贝经销商图片文件
return gulp.src('static/app/img/**/*').pipe(gulp.dest(buildBasePath + 'app/img'))
})
gulp.task('copy-dealer', gulpSequence(['copy_dealer_1'], ['copy_dealer_2']))
//复制终端用户文件
gulp.task('copy-enduser', function () {
//拷贝终端用户图片文件
return gulp.src('static/pages/images/**/*').pipe(gulp.dest(buildBasePath + 'pages/images'))
})
gulp.task('copy-help', function () {
return gulp.src(['static/help/**/*.*']).pipe(gulp.dest(buildBasePath + 'help'))
})
gulp.task('chaoben_html', function () {
return gulp
.src(['static/chaoben/**/*.html'])
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(
htmlmin({
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 ==>
removeEmptyAttributes: true, //删除所有空格作属性值 ==>
removeScriptTypeAttributes: true, //删除\n'
)
)
.pipe(gulp.dest(dealerRevDir))
})
gulp.task('html_dealer_2', function () {
//由于引用了经销商的样式和js,压缩代理商的文件注意路径
return gulp
.src([dealerRevDir + '/**/*.json', commonRevDir + '/**/*.json', agentsHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(
inject.beforeEach(
'',
'\n\n'
)
)
.pipe(gulp.dest(agentsRevDir))
})
gulp.task('html-dealer', gulpSequence(['html_dealer_1'], ['html_dealer_2']))
/************测试系统加入带版本号的CSS、JS引用*************/
gulp.task('html-test', function () {
//测试模块html处理
return gulp
.src([dealerRevDir + '/**/*.json', commonRevDir + '/**/*.json', testHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(testRevDir))
})
/************ weknow 加入带版本号的CSS、JS引用*************/
gulp.task('html-weknow', function () {
//测试模块html处理
return gulp
.src([dealerRevDir + '/**/*.json', commonRevDir + '/**/*.json', weknowHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(weknowRevDir))
})
/************ public 加入带版本号的CSS、JS引用*************/
gulp.task('html-public', function () {
//测试模块html处理
return gulp
.src([commonRevDir + '/**/*.json', publicRevDir + '/**/*.json', publicHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(publicRevDir))
})
/************ help 加入带版本号的CSS、JS引用*************/
gulp.task('html-help', function () {
//测试模块html处理
return gulp
.src([dealerRevDir + '/**/*.json', commonRevDir + '/**/*.json', helpHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(helpRevDir))
})
/************终端用户加入带版本号的CSS、JS引用*************/
gulp.task('html-enduser', function () {
//终端用户html处理
return gulp
.src([enduserRevDir + '/**/*.json', commonRevDir + '/**/*.json', enduserHtmlSrc])
.pipe(revCollector()) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(
inject.beforeEach(
'',
'\n\n'
)
)
.pipe(gulp.dest(enduserRevDir))
})
/************管理系统加入带版本号的CSS、JS引用,开发时尽量不要有重名文件*************/
//修改manage主页的js/css引用
gulp.task('res-rev-manage', function () {
return gulp
.src([buildBasePath + '1.0/**/rev-manifest.json', 'static/1.0/**/*.html'])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(buildBasePath + '1.0'))
})
//修改admaster主页的js/css引用
gulp.task('res-rev-admaster', function () {
//----css、js 公用1.0的,【后面的json优先级高于前面,注意admaster往后放】---
return gulp
.src([
buildBasePath + '1.0/js/rev-manifest.json',
buildBasePath + 'admaster/js/rev-manifest.json',
buildBasePath + '1.0/css/rev-manifest.json',
'static/admaster/**/*.html',
])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(buildBasePath + 'admaster'))
})
//修改administrator主页的js/css引用
gulp.task('res-rev-administrator', function () {
//----css、js 公用1.0的,【后面的json优先级高于前面,注意administrator往后放】---
return gulp
.src([
buildBasePath + '1.0/js/rev-manifest.json',
buildBasePath + 'administrator/js/rev-manifest.json',
buildBasePath + '1.0/css/rev-manifest.json',
'static/administrator/**/*.html',
])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest(buildBasePath + 'administrator'))
})
//【在manage路由配置中也有引用到js!】
gulp.task('res-rev-manage-js', function () {
return gulp
.src([buildBasePath + '1.0/js/rev-manifest.json', buildBasePath + '1.0/js/*.router.js'])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulp.dest(buildBasePath + '1.0/js'))
})
//【在admaster路由配置中也有引用到js!】
gulp.task('res-rev-admaster-js', function () {
//----指令、服务、过滤器等 公用1.0的,【后面的json优先级高于前面,注意admaster往后放】---
return gulp
.src([
buildBasePath + '1.0/js/rev-manifest.json',
buildBasePath + 'admaster/js/rev-manifest.json',
buildBasePath + 'admaster/js/*.router.js',
])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulp.dest(buildBasePath + 'admaster/js'))
})
//【在administrator路由配置中也有引用到js!】
gulp.task('res-rev-administrator-js', function () {
//----指令、服务、过滤器等 公用1.0的,【后面的json优先级高于前面,注意administrator往后放】---
return gulp
.src([
buildBasePath + '1.0/js/rev-manifest.json',
buildBasePath + 'administrator/js/rev-manifest.json',
buildBasePath + 'administrator/js/*.router.js',
])
.pipe(revCollector({ replaceReved: true })) //修改html的引入资源成为带hash的文件路径
.pipe(gulp.dest(buildBasePath + 'administrator/js'))
})
gulp.task('moveAll', function (done) {
// 暂时不清理
done()
})
/********发布任务**************/
//默认任务、全部产品发布
gulp.task('default', function (done) {
console.log('-------------------------请用以下命令发布产品-----------------------------')
console.log(' \x1B[32m gulp all \x1B[0m --发布所有产品')
console.log(' \x1B[32m gulp manage \x1B[0m --发布后台管理系统和公司网站')
console.log(' \x1B[32m gulp dealer \x1B[0m --发布经销商、代理商')
console.log(' \x1B[32m gulp test \x1B[0m --发布测试系统')
console.log(' \x1B[32m gulp weknow \x1B[0m --发布weknow')
console.log(' \x1B[32m gulp public \x1B[0m --发布public')
console.log(' \x1B[32m gulp help \x1B[0m --发布whelp')
console.log(' \x1B[32m gulp enduser \x1B[0m --发布终端用户')
console.log(' \r\n')
console.log(' \x1B[31m gulp all --dist new_dist_dir \x1B[0m --输出到new_dist_dir')
console.log('--------------------------------------------------------------------------')
})
//默认任务、全部产品发布
module.exports.all = gulpSequence(
// ['clean:Build'],//删除所有旧的dist文件
['clean:common'], //清空公共组件 会导致经销商、代理商的公共文件丢失
['clean:manage'], //清空相关文件
['clean:dealer'], //清空相关文件
['clean:test'], //清空相关文件
['clean:weknow'], //清空相关文件
['clean:public'], //清空相关文件
['clean:help'], //清空相关文件
['clean:enduser'], //清空相关文件
['copy-manage'], //复制管理系统、广告系统 静态文件
['copy-common'], //复制公共组件、文件
['copy-dealer'], //复制经销商、代理商、测试系统文件
['copy-enduser'], //复制终端用户文件
['copy-help'], //copy help
// ['chaoben'], //copy chaoben
// 后台管理系统、广告系统
['manageRevCss'],
['manageRevJs'],
['admasterRevJs'],
['administratorRevJs'],
['res-rev-manage'],
['res-rev-admaster'],
['res-rev-administrator'],
['res-rev-manage-js'],
['res-rev-admaster-js'],
['res-rev-administrator-js'],
//编译公共js、css并加入版本号
['customRevJs'],
['customRevCss'],
['customReceiptCss'],
['customRevFont'],
//经销商、代理商、测试系统CSS、js文件编译并加入版本号
['appRevCss'],
['appRevJs'],
//终端用户CSS、js文件编译并加入版本号
['enduserRevCss'],
['enduserRevJs'],
//经销商、代理商、测试系统、终端用户的CSS、js引入修改
['html-dealer'],
['html-test'],
['html-weknow'],
['html-public'],
['html-enduser'],
//移动到发布目录
['moveAll']
)
//后台管理系统、公司网站
gulp.task(
'manage',
gulpSequence(
['clean:manage'], //清空管理系统相关文件
['copy-manage'], //复制后台管理系统、网站文件
/******后台管理系统公共组件vender、字体变更较少,不需要编译***********/
/**!!!!依赖json minifest的一定要保证顺序执行,否则结果永远不正确!!!!**/
['manageRevCss'],
['manageRevJs'],
['admasterRevJs'],
['administratorRevJs'],
['res-rev-manage'],
['res-rev-admaster'],
['res-rev-administrator'],
['res-rev-manage-js'],
['res-rev-admaster-js'],
['res-rev-administrator-js'],
//移动到发布目录
['moveAll']
)
)
//经销商、代理商
gulp.task(
'dealer',
gulpSequence(
['clean:dealer'], //清空相关文件
['copy-common'], //复制公共组件、文件
['copy-dealer'], //复制经销商、代理商文件
//编译公共js、css并加入版本号
['customRevJs'],
['customRevCss'],
['customRevFont'],
//经销商、代理商、测试系统 公用的CSS、js文件编译并加入版本号
['appRevCss'],
['appRevJs'],
//经销商、代理商的CSS、js引入修改
['html-dealer'],
//移动到发布目录
['moveAll']
)
)
// 测试系统
gulp.task(
'test',
gulpSequence(
['clean:test'], //清空相关文件
// todo 其实和经销商的公共组件重复,但是为了可以单独部署,也需要公共文件;在和经销商一起部署时,为了不影响经销商,不要clean:common
['copy-common'], //复制公共组件、文件
['copy-dealer'], //复制经销商、代理商文件、测试系统就用到了几张图片
//编译公共js、css并加入版本号:似乎代码不变的情况的下,编译的文件名居然不同。。。
['customRevJs'],
['customRevCss'],
['customRevFont'],
//经销商、代理商、测试系统 公用的CSS、js文件编译并加入版本号
['appRevCss'],
['appRevJs'],
//测试系统的CSS、js引入修改
['html-test'],
//移动到发布目录
['moveAll']
)
)
// weknow 发布
gulp.task(
'weknow',
gulpSequence(
['clean:weknow'], //清空相关文件
['copy-common'], //复制公共组件、文件
['copy-dealer'], //复制经销商、代理商文件、测试系统就用到了几张图片
//编译公共js、css并加入版本号:似乎代码不变的情况的下,编译的文件名居然不同。。。
['customRevJs'],
['customRevCss'],
['customRevFont'],
//经销商、代理商、测试系统 公用的CSS、js文件编译并加入版本号
['appRevCss'],
['appRevJs'],
//测试系统的CSS、js引入修改
['html-weknow'],
//移动到发布目录
['moveAll']
)
)
// public 发布
gulp.task(
'public',
gulpSequence(
['clean:public'], //清空相关文件
['copy-common'], //复制公共组件、文件
['copy-dealer'], //复制经销商、代理商文件、测试系统就用到了几张图片
//编译公共js、css并加入版本号:似乎代码不变的情况的下,编译的文件名居然不同。。。
['customRevJs'],
['customRevCss'],
['customRevFont'],
//经销商、代理商、测试系统 公用的CSS、js文件编译并加入版本号
['appRevCss'],
['appRevJs'],
['html-public'],
//移动到发布目录
['moveAll']
)
)
// help 发布
gulp.task(
'help',
gulpSequence(
['clean:help'], //清空相关文件
['copy-help'], //copy help
//移动到发布目录
['moveAll']
)
)
//终端用户
gulp.task(
'enduser',
gulpSequence(
['clean:enduser'], //清空相关文件
['copy-common'], //复制公共组件、文件
['copy-enduser'], //复制终端用户文件
//编译公共js、css并加入版本号
['customRevJs'],
['customRevCss'],
['customRevFont'],
//终端用户CSS、js文件编译并加入版本号
['enduserRevCss'],
['enduserRevJs'],
//终端用户的CSS、js引入修改
['html-enduser'],
//移动到发布目录
['moveAll']
)
)
//js语法检测 【开发使用】
gulp.task('jshint', function () {
return gulp.src('static/app/js/*.js').pipe(jshint()).pipe(jshint.reporter('default'))
})
/*************嵌入式设备页面压缩**********************/
gulp.task('wifi-copy', function () {
return gulp.src(['static/wifi/**/*.gz']).pipe(gulp.dest('dist/wifi'))
})
gulp.task(
'html-wifi',
series('wifi-copy', function (done) {
return gulp
.src(['static/wifi/**/*.html'])
.pipe(gulpRemoveHtml()) //清除特定标签
.pipe(removeEmptyLines({ removeComments: true })) //清除空白行
.pipe(htmlmin(htmlOptions))
.pipe(gulp.dest('dist/wifi'))
})
)