-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
195 lines (178 loc) · 4.92 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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/**
* Created by Tancky on 2018/5/4.
*/
let NODE_ENV = process.argv[2];
console.log(`>>当前构建的环境为:${NODE_ENV}模式!===================`);
let gulp = require('gulp'),
$ = require('gulp-load-plugins')(), // 自动加载以gulp-为前缀的插件
pxtoviewport = require('postcss-px-to-viewport'), // postcss
px2rem = require('postcss-px2rem'),
autoprefixer = require('autoprefixer'), // 自动添加浏览器前缀 gulp-autoprefixer已废弃
browserSync = require('browser-sync').create(), //浏览器同步测试工具
reload = browserSync.reload, //browserSync重载方法
del = require('del'), //del代替gulp-clean
precompile = require('gulp-handlebars-precompile'),
run = require('run-sequence'); //同步/异步执行gulp任务
// 读取gulp目录下所有的任务遍历后require引入,然后执行gulp任务
// fs.readdirSync('./gulp/').forEach((file) => {
// require('./gulp/' + file)(gulp, $, NODE_ENV);
// });
// 配置目录结构
var path = {
dir: {
src: 'src/',
dev: 'dev/',
build: 'build/'
},
src: {
less: 'src/less/',
js: 'src/js/',
img: 'src/img/',
fonts: 'src/fonts/',
static: 'src/static/'
},
dev: {
css: 'dev/css/',
js: 'dev/js/',
img: 'dev/img/',
fonts: 'dev/fonts/',
static: 'dev/static/'
},
build: {
css: 'build/css/',
js: 'build/js/',
img: 'build/img/',
fonts: 'build/fonts/'
}
}
// 清除dev目录
gulp.task('clean:dev', () => {
return del([`${path.dir.dev}*`])
})
//压缩html
gulp.task('html:dev', () => {
return gulp.src(`${path.dir.src}index.html`)
.pipe($.changed(`${path.dir.dev}index.html`, {hasChanged: $.changed.compareSha1Digest}))
// .pipe($.htmlMinify())
.pipe($.useref())
.pipe(gulp.dest(path.dir.dev))
.pipe(reload({stream:true}))
})
// less编译/自动处理浏览器前缀/压缩css
gulp.task('css:dev', () => {
var processors = [
pxtoviewport({
viewportWidth: 750,
viewportHeight: 1334,
unitPrecision: 5,
viewportUnit: 'vw',
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: false
}),
// px2rem({remUnit: 75}),
autoprefixer({
browsers: ['iOS >= 7', 'Android >= 4.1']
})
];
return gulp.src(`${path.src.less}index.less`)
.pipe($.changed(`${path.dir.dev}css/*.css`, {hasChanged: $.changed.compareSha1Digest}))
.pipe($.less())
.pipe($.postcss(processors))
.pipe($.concat('app.min.css'))
.pipe($.cleanCss())
// .pipe($.rev()) // 生产模式开启
.pipe(gulp.dest(path.dev.css))
// .pipe($.rev.manifest()) // 生产模式开启
// .pipe(gulp.dest('./rev/css')) // 生产模式开启
.pipe(reload({stream:true}))
})
//压缩js
gulp.task("js:dev", function(){
gulp.src(`${path.src.js}**/*.js`)
.pipe($.plumber())
.pipe($.changed(`${path.dir.dev}js/*.js`, {hasChanged: $.changed.compareSha1Digest}))
.pipe($.babel({
presets: ['env']
}))
.pipe($.concat('app.min.js'))
.pipe($.uglify())
// .pipe($.rev()) // 生产模式开启
.pipe(gulp.dest(path.dev.js))
// .pipe($.rev.manifest()) // 生产模式开启
// .pipe(gulp.dest('./rev/js')) // 生产模式开启
.pipe(reload({stream:true}))
});
//eslint代码检查
gulp.task('eslint:dev', () => {
return gulp.src(`${path.src.js}**/*.js`)
.pipe($.eslint())
.pipe($.plumber())
.pipe($.eslint.format())
.pipe($.eslint.failAfterError())
.on("error", $.notify.onError({
message: "具体错误请查看终端",
title: "代码不规范"
}))
})
//handlebars预编译
gulp.task('tpl:dev', function(){
return gulp.src('src/*.html')
.pipe(precompile({
reg: /<!\-\-hbs\s+"([^"]+)"\-\->/g,
baseSrc: "src/tpl/",
dest: "dev/tpl/",
scriptSrc: 'tpl/',
inline: true,
namespace: 'kevin'
}))
.pipe(gulp.dest('dev/'))
});
//自动上传服务器
gulp.task('ftp:dev', function () {
return gulp.src('dev/**/*')
.pipe($.ftp({
host: '123.57.224.228',
port: 21,
user: 'tzl',
pass: 'tzl@ilc#pgsq'
}))
});
// md5
gulp.task('rev', () => {
return gulp.src(['./rev/**/*.json', `${path.dir.dev}index.html`])
.pipe($.revCollector())
.pipe(gulp.dest(path.dir.dev))
})
//watch 实时监听
gulp.task('server:dev', () => {
// 自动打开浏览器并实时监听文件改动
browserSync.init({
server: {
baseDir: "dev/"
}
});
gulp.watch(`${path.dir.src}**/*.less`, ['css:dev'])
gulp.watch(`${path.dir.src}js/*.js`, ['js:dev'])
gulp.watch(`${path.dir.src}*.html`, ['html:dev'])
})
// 开发环境
gulp.task('dev', function (done) {
run (
['clean:dev'],
['html:dev', 'css:dev', 'js:dev'],
// ['rev'], //生产模式添加MD5
['server:dev'],
done
)
})
// 生产环境
gulp.task('build', function (done) {
run (
['clean:dev'],
['html:dev', 'css:dev', 'js:dev'],
// ['rev'], //生产模式添加MD5
['ftp:dev'],
done
)
})