-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
95 lines (88 loc) · 2.82 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
const gulp = require("gulp");
const connect = require('gulp-connect');
const replace = require('gulp-replace');
const htmlmin = require('gulp-htmlmin');
const terser = require('gulp-terser');
const cleanCSS = require('gulp-clean-css');
const jsonmin = require('gulp-jsonmin');
const output = 'dst';
const trueSrc = ['src/**', '!node_modules/**', '!dst/**', '!**/*.bak', '!gulpfile.js', '!package.json', '!yarn.lock', '!README.md'];
function move() {
return gulp.src(trueSrc)
.pipe(gulp.dest(output));
}
function updateServiceWorkers() {
return gulp.src('sw.js', { cwd: output })
.pipe(replace('SERVICE_WORKERS_CACHE_NAME', () => {
// 生成随机缓存名更新 Service Workers 缓存
return 'BUILD_' + Math.random().toString(36).slice(-11) + new Date().getTime();
}))
// .pipe(replace('// SERVICE_WORKERS_INJECT_POINT',
// "('serviceWorker' in navigator) ? navigator.serviceWorker.register('/sw.js') : null;"))
.pipe(gulp.dest(output));
}
function htmlMinify() {
return gulp.src(['**/*.html'], { cwd: output })
.pipe(htmlmin({
includeAutoGeneratedTags: true,
removeAttributeQuotes: true,
removeComments: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
sortClassName: true,
useShortDoctype: true,
collapseWhitespace: true,
minifyCSS: true,
minifyJS: true,
}))
.pipe(gulp.dest(output));
}
function cssMinify() {
return gulp.src(['**/*.css'], { cwd: output })
.pipe(cleanCSS({compatibility: 'ie8'}))
.pipe(gulp.dest(output));
}
function jsTerser() {
return gulp.src(['**/*.js'], { cwd: output })
.pipe(terser({
compress: {
drop_console: true
},
}))
.pipe(gulp.dest(output));
}
function jsonMinify() {
return gulp.src(['**/*.json', 'jietodo.webmanifest'], { cwd: output })
.pipe(jsonmin())
.pipe(gulp.dest(output));
}
exports.default = exports.build = gulp.series(
move,
updateServiceWorkers,
gulp.parallel(
htmlMinify,
cssMinify,
jsTerser,
jsonMinify
)
);
function watch() {
// 增量构建
return gulp.src(trueSrc, {since: gulp.lastRun(watch)})
.pipe(gulp.dest(output))
.pipe(gulp.src('sw.js', {cwd: 'src'}))
.pipe(replace('SERVICE_WORKERS_CACHE_NAME', () => {
return 'DEV_' + Math.random().toString(36).slice(-11);
}))
.pipe(gulp.dest(output))
.pipe(connect.reload())
}
exports.watch = async () => {
connect.server({
root: 'dst',
port: 3000,
livereload: true
});
gulp.watch(trueSrc, {ignoreInitial: false}, watch);
}