新版本的gulp使用exports导出任务,每个任务必须有一个参数用作回调函数


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
@文件 :gulpfile.js
@Time :2021-01-02 22:23:00
@Author :Karcyril
@Software:Visual Studio Code
*/

var gulp = require('gulp');
var sass = require('gulp-sass');
var connect = require('gulp-connect');
var minimist = require('minimist');
var rename = require('gulp-rename');
var plumber = require('gulp-plumber');//防止sass编译错误中断监听任务
/*编译sass */
function compilerCSS(cb) {
gulp.src('../practice/css/**/*.scss')
.pipe(plumber())/*要放在sass()执行之前 防止sass编译出错中断程序*/
.pipe(sass({ outputStyle: "expanded" }))
/*在css文件夹下输入,会自动创建文件夹结构 */
.pipe(gulp.dest('../practice/css/'));
cb();
}

/*自动编译和自动刷新 的监听 */
function watch(cb) {
/*监听css目录下所有scss文件,发生变化时执行series里的函数 */
gulp.watch('../practice/css/**/*.scss', gulp.series(compilerCSS));
/*自动刷新 */
gulp.watch(['../practice/*.html', '../practice/html/*.html', '../practice/*.js', '../practice/js/*.js', '../practice/css/*.css'], reload);
cb();
}

/*只自动编译 的监听 */
function watchCss(cb) {
gulp.watch('../practice/css/**/*.scss', gulp.series(compilerCSS));
cb();
}
/*自动刷新网页 */
function reload(cb) {
// gulp.src(['../practice/**/*.html', '!../root/**/*.*', '!../source/**/*.*'])
// .pipe(connect.reload());
gulp.src('../practice/**/*.html')
.pipe(connect.reload());
cb();
}
/*建立热更新服务器*/
function server(cb) {
connect.server({
root: '../', //主机目录
port: 8080, //服务器端口使用8080 避免和apache冲突
livereload: true //热更新
})
cb();
}
/*导入命令行的第三个参数 使用--env连接 参数保存在options.env中*/
var options = minimist(process.argv.slice(2), {
string: "env",
// default: { env: process.env.NODE_ENV || "production" }
});


/*储存practice项目 start*/
function saveAll(cb) {
gulp.src(['../practice/**/*.*', '!../practice/js/jquery/**/*.*', '!../practice/js/jsconfig.json'])
.pipe(gulp.dest('../source/' + options.env));
cb();
}

function saveHTML(cb) {
gulp.src(['../practice/*.html']).pipe(gulp.dest('../source/' + options.env));
gulp.src(['../practice/html/*.html']).pipe(gulp.dest('../source/' + options.env + '/html'));
cb();
}
function saveJavascript(cb) {
gulp.src(['../practice/*.js']).pipe(gulp.dest('../source/' + options.env));
gulp.src(['../practice/js/*.js']).pipe(gulp.dest('../source/' + options.env + '/js'));
gulp.src(['../practice/js/lib/jquery-3.5.1.min.js']).pipe(gulp.dest('../source/' + options.env + '/js/lib'));
cb();
}
/*把sass文件一并保存,便于学习研究 */
function saveCSS(cb) {
/*不匹配以_开头的scss文件(预导入文件) */
gulp.src(['../practice/css/*.css', '../practice/css/[^_]*.scss']).pipe(gulp.dest('../source/' + options.env + '/css'));
gulp.src('../practice/libs/bootstrap/css/bootstrap.min.css').pipe(gulp.dest('../source/' + options.env + '/libs/bootstrap/css'));
cb();
}
function savePHP(cb) {
gulp.src(['../practice/php/*.php']).pipe(gulp.dest('../source/' + options.env + '/php'));
cb();
}
function saveImgDevelopment(cb) {
gulp.src(['../practice/imgDevelopment/**/*.*']).pipe(gulp.dest('../source/' + options.env + '/imgDevelopment'));
cb();
}
var save;
/*判断是否有命令行参数*/
if (options.env) {
// save = gulp.series(saveHTML, saveJavascript, saveCSS, savePHP, saveImgDevelopment);
save = saveAll;
} else {
save = function (cb) {
console.log('\033[31;43mrequire a directory name,you must input an extra parameter.\033[0m');
cb();
}
}
/*储存practice项目 end */



exports.save = save;
/*默认开启热更新服务器和文件监听 */
exports.default = gulp.series(watch, server);

exports.watchCss = watchCss;