-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
148 lines (131 loc) · 3.85 KB
/
Copy pathgulpfile.js
File metadata and controls
148 lines (131 loc) · 3.85 KB
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
const gulp = require('gulp');
const OSS = require('ali-oss');
const fs = require('fs-extra');
const path = require('path');
const mime = require('mime-types');
const AgentKeepAlive = require('agentkeepalive');
const Async = require('async');
const imagemin = require('gulp-imagemin');
const rev = require('gulp-rev');
const uglify = require('gulp-uglify');
const cssnano = require('gulp-cssnano');
const htmlClean = require('gulp-htmlclean');
const imageMin = require('gulp-imagemin');
const del = require('del');
const config = require('./gulpfile.config.json');
gulp.task('upload-cdn', async function () {
const platform = config.path;
// 将你的默认的任务代码放在这
const client = new OSS({
secure: true,
// region: 'oss-cn-beijing', // endpoint指定时,region会被忽略
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,部署在服务端使用RAM子账号或STS,部署在客户端使用STS。
accessKeyId: config.accessKeyId,
accessKeySecret: config.accessKeySecret,
bucket: config.bucket,
endpoint: config.endpoint,
// 手动传入agent,并把最大空闲时间设置为5分钟
agent: new AgentKeepAlive({
timeout: 5 * 60 * 1000,
maxSockets: 30
}),
timeout: 5 * 60 * 1000
});
async function putOSS(src, dist) {
try {
await client.put(platform + dist, src, {
'Content-Type': `${mime.lookup(src)}; charset=utf-8`
});
// console.log(result);
} catch (e) {
console.log(e);
}
}
function addFileToOSSSync(src, dist, files) {
const docs = fs.readdirSync(src);
docs.forEach(function (doc) {
const _src = `${src}/${doc}`;
const _dist = `${dist}/${doc}`;
const st = fs.statSync(_src);
// 判断是否为文件
if (st.isFile() && doc !== '.DS_Store') {
files.push({
src: _src,
dist: _dist
});
// putOSS(_src, _dist);
}
// 如果是目录则递归调用自身
else if (st.isDirectory()) {
addFileToOSSSync(_src, _dist, files);
// console.log(_src + '是文件夹')
}
});
}
const files = [];
const filePath = path.resolve('./cdn/dist');
await addFileToOSSSync(filePath, '', files);
const p = Async.queue(function (task, callback) {
console.log('task.src, task.dist', task.src, task.dist);
putOSS(task.src, task.dist).then(() => {
callback();
});
}, 5);
p.push([...files]);
});
function cleanCDNDist() {
return del(['cdn/dist/*']);
}
gulp.task('mini', async function () {
cleanCDNDist();
gulp.src('cdn/src/*').pipe(imagemin()).pipe(rev()).pipe(gulp.dest('cdn/dist'));
});
function minifyJS() {
return gulp
.src('dist/**/*.js')
.pipe(
uglify({
output: {
comments: false
}
})
)
.pipe(gulp.dest('./build'));
}
function minifyCSS() {
return gulp
.src('dist/**/*.wxss')
.pipe(cssnano({ zindex: false }))
.pipe(gulp.dest('./build'));
}
function minifyHTML() {
return gulp.src('dist/**/*.wxml').pipe(htmlClean()).pipe(gulp.dest('./build'));
}
function minifyImg() {
return gulp.src(['dist/**/*.png', 'dist/**/*.jpg']).pipe(imageMin()).pipe(gulp.dest('./build/'));
}
function copyOther() {
return gulp.src(['dist/**/*.map', 'dist/**/*.json', 'dist/**/*.wxs']).pipe(gulp.dest('./build'));
}
function cleanBuild() {
return del(['build/**/*']);
}
function cleanDist() {
return del(['dist/**/*']);
}
function carry() {
return gulp.src('build/**/*').pipe(gulp.dest('dist'));
}
function wait() {
return new Promise(resolve => {
console.log('waiting file refresh');
setTimeout(() => {
resolve();
}, 3000);
});
}
gulp.task(
'build',
gulp.series(cleanBuild, gulp.parallel(minifyJS, minifyCSS, minifyHTML, minifyImg, copyOther), cleanDist, carry, wait)
);
gulp.task('default', gulp.series('build'));