/******************* * 后台管理系统、公司网站分为一组; * 代理商、经销商、测试系统分为一组(由于测试系统依赖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')) }) )