-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
180 lines (161 loc) · 6.63 KB
/
gulpfile.js
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
var config = {
src: './src/',
dist: './.dist/',
tmp: './.tmp/',
rev: './.tmp/rev/',
js: 'js/**/*.js',
css: 'css/**/*.css',
sass: 'css/**/*.scss',
mock: 'mock/**/*.json',
html: '**/*.html',
jsPath: 'js/',
cssPath: 'css/',
imgPath: 'img/',
mockPath: 'mock/'
};
var gulp = require('gulp');
var del = require('del');
var browserSync = require('browser-sync').create();
var revdel = require('gulp-rev-delete-original');
var sass = require('gulp-sass')(require('sass'));
/** Start local-service-middleware **/
// var proxyMiddleware = require('http-proxy-middleware');
/** Get cmd's argv **/
// var argv = require('yargs').argv;
var cssnano = require('gulp-cssnano');
var uglify = require('gulp-uglify');
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var fileinclude = require('gulp-file-include');
/** Delete tmp dir and dist dir **/
gulp.task('clean', async function () {
return del.sync([config.dist, config.tmp]);
});
/** Copy src to tmp dir **/
gulp.task('src2tmp', function () {
console.log('Task----->: Copy src to tmp dir');
return gulp.src(config.src + "**").pipe(gulp.dest(config.tmp));
});
/** In tmp dir, exec fileinclude **/
gulp.task('fileinclude', function () {
console.log('Task----->: In tmp dir, exec fileinclude');
return gulp.src(config.tmp + config.html)
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
})).pipe(gulp.dest(config.tmp));
});
/** In tmp dir, exec sass **/
gulp.task('sass', function () {
console.log('Task----->: In tmp dir, exec sass');
return gulp.src(config.tmp + config.sass)
.pipe(sass()).pipe(gulp.dest(config.tmp+ config.cssPath));
});
/** In tmp dir, delete sass files **/
gulp.task('dele-sass', async function () {
console.log('Task----->: In tmp dir, delete sass files');
return del.sync([config.tmp + config.sass]);
});
gulp.task('init-task', gulp.series('src2tmp', 'fileinclude', 'sass', 'dele-sass'))
/** Copy tmp to dest dir **/
gulp.task('tmp2dest', function () {
console.log('Task----->: Copy tmp to dest dir');
return gulp.src(config.tmp + "**").pipe(gulp.dest(config.dist));
});
/** In tmp/img dir, append hashId to Img's name **/
gulp.task('img', function () {
console.log('Task----->: In tmp/img dir, append hashId to img name');
return gulp.src(config.tmp + config.imgPath + '**')
.pipe(rev())
.pipe(revdel())
.pipe(gulp.dest(config.tmp + config.imgPath))
.pipe(rev.manifest())
.pipe(gulp.dest(config.rev + 'img'));
});
/** In tmp/mock dir, replace name(ex: Img) with hashId in all json file **/
gulp.task('mock-replace-img', function () {
console.log('Task----->: In tmp/mock dir, replace name(ex: Img) with hashId in all json file');
return gulp.src([config.rev + '/**/*.json', config.tmp + config.mock])
.pipe(revCollector())
.pipe(gulp.dest(config.tmp + config.mockPath));
});
/** In tmp/mock dir, append hashId to json's name **/
gulp.task('mock-rev', function () {
console.log('Task----->: In tmp/mock dir, append hashId to jsons name');
return gulp.src(config.tmp + config.mock)
.pipe(rev())
.pipe(revdel())
.pipe(gulp.dest(config.tmp + config.mockPath))
.pipe(rev.manifest())
.pipe(gulp.dest(config.rev + 'mock'));
});
gulp.task('mock', gulp.series('mock-replace-img', 'mock-rev'));
/** In tmp/css dir, replace name(ex: Img) with hashId in all css file **/
gulp.task('css-replace-img', function () {
console.log('Task----->: In tmp/css dir, replace name(ex: Img) with hashId in all css file');
return gulp.src([config.rev + '/**/*.json', config.tmp + config.css])
.pipe(revCollector()).pipe(gulp.dest(config.tmp + config.cssPath));
});
/** In tmp/css dir, compress css file then append hashId to css's name **/
gulp.task('css-rev', function () {
console.log('Task----->: In tmp/css dir, compress css file then append hashId to css name');
return gulp.src(config.tmp + config.css)
.pipe(cssnano({"safe": true}))
.pipe(rev())
.pipe(revdel())
.pipe(gulp.dest(config.tmp + config.cssPath))
.pipe(rev.manifest())
.pipe(gulp.dest(config.rev + 'css'));
});
gulp.task('css', gulp.series('css-replace-img', 'css-rev'));
/** In tmp/js dir, replace name(ex: Img, Json) with hashId in all js file **/
gulp.task('js-replace-mock', function () {
console.log('Task----->: In tmp/js dir, replace name(ex: Img, Json) with hashId in all js file');
return gulp.src([config.rev + '/**/*.json', config.tmp + config.js])
.pipe(revCollector()).pipe(gulp.dest(config.tmp + config.jsPath));
});
/** In tmp/js dir, compress js file then append hashId to js's name **/
gulp.task('js-rev', function () {
console.log('Task----->: In tmp/js dir, compress js file then append hashId to js name');
return gulp.src(config.tmp + config.js)
.pipe(uglify())
.pipe(rev())
.pipe(revdel())
.pipe(gulp.dest(config.tmp + config.jsPath))
.pipe(rev.manifest())
.pipe(gulp.dest(config.rev + 'js'));
});
gulp.task('js', gulp.series('js-replace-mock', 'js-rev'));
/** In tmp dir, replace name(ex: Img, Json, Css) with hashId in all html file **/
gulp.task('html-replace-jscss', function () {
console.log('Task----->: In tmp dir, replace name(ex: Img, Json, Css) with hashId in all html file');
return gulp.src([config.rev + '/**/*.json', config.tmp + config.html])
.pipe(revCollector())
.pipe(gulp.dest(config.tmp));
});
gulp.task('html', gulp.series('html-replace-jscss'));
/** hot deply in dev **/
gulp.task('reload', function (done) {
console.log('Task----->: browser reload......');
browserSync.reload();
done();
});
gulp.task('browserSync', function () {
browserSync.init({
injectChanges: false,
server: {
baseDir: config.dist,
// index: "index.html",
//middleware: [
// proxyMiddleware('/1.0', target)
//]
}
});
});
gulp.task('watchAll', function () {
gulp.watch([config.src + config.html, config.src + config.css, config.src + config.sass, config.src + config.js, config.src + config.mock], gulp.series('init-task', 'tmp2dest', 'reload'));
// gulp.watch([config.dist + config.html, config.dist + config.css, config.dist + config.js, config.dist + config.mock], gulp.series('reload'));
});
/** gulp command **/
gulp.task('dev', gulp.series('clean', 'init-task', 'img', 'mock', 'css', 'js', 'html', 'tmp2dest', gulp.parallel('watchAll', 'browserSync')));
gulp.task('publish', gulp.series('clean', 'init-task', 'img', 'mock', 'css', 'js', 'html', 'tmp2dest'));