forked from wux-weapp/wux-weapp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.babel.js
121 lines (103 loc) · 3.22 KB
/
gulpfile.babel.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
import path from 'path'
import gulp from 'gulp'
import babel from 'gulp-babel'
import uglify from 'gulp-uglify'
import less from 'gulp-less'
import cleanCSS from 'gulp-clean-css'
import rename from 'gulp-rename'
import postcss from 'gulp-postcss'
import cssnano from 'gulp-cssnano'
import util from 'gulp-util'
import through2 from 'through2'
import autoprefixer from 'autoprefixer'
import del from 'del'
// 配置环境
const ENV = process.env.NODE_ENV
const isDev = ENV === 'development' || ENV === 'dev'
const isProd = ENV === 'production' || ENV === 'prod'
const buildPath = path.join(__dirname, isProd ? 'dist/' : 'example/dist/')
const format = isProd ? false : 'beautify'
const paths = {
styles: {
src: ['src/**/*.wxss'],
dest: buildPath,
},
scripts: {
src: 'src/**/*.js',
dest: buildPath,
},
copy: {
src: ['src/**', '!src/**/*.wxss', '!src/icon/fonts/**'],
dest: buildPath,
},
}
/**
* 自定义插件 - px to rpx
*/
const px2Rpx = () => {
// 正则匹配
const pxReplace = (value = '') => {
const pxRegExp = /(\d*\.?\d+)px/ig
const pxReplace = (strArg) => {
const str = parseFloat(strArg)
return str === 0 ? 0 : `${2 * str}rpx`
}
return value.replace(pxRegExp, pxReplace)
}
return through2.obj(function(file, encoding, cb) {
// 如果文件为空,不做任何操作,转入下一个操作,即下一个pipe
if (file.isNull()) {
this.push(file)
return cb()
}
// 插件不支持对stream直接操作,抛出异常
if (file.isStream()) {
this.emit('error', new util.PluginError('px2Rpx', 'Streaming not supported'))
return cb()
}
// 内容转换,处理好后,再转成 Buffer 形式
const content = pxReplace(file.contents.toString())
file.contents = typeof Buffer.from === 'function' ? Buffer.from(content) : new Buffer(content)
// 下面这两句基本是标配,可参考 through2 的 API
this.push(file)
cb()
})
}
export const clean = () => del([buildPath])
export const styles = () => (
gulp
.src(paths.styles.src, { base: 'src' })
.pipe(less())
.pipe(px2Rpx())
.pipe(postcss())
.pipe(cleanCSS({ format }))
// .pipe(
// cssnano({
// zindex: false,
// autoprefixer: false,
// discardComments: { removeAll: true },
// })
// )
.pipe(
rename((path) => (path.extname = '.wxss'))
)
.pipe(gulp.dest(paths.styles.dest))
)
export const scripts = () => (
gulp.src(paths.scripts.src, { base: 'src' })
.pipe(babel())
.pipe(uglify())
.pipe(gulp.dest(paths.scripts.dest))
)
export const copy = () => (
gulp
.src(paths.copy.src, { base: 'src' })
.pipe(gulp.dest(paths.copy.dest))
)
const watchFiles = () => {
gulp.watch(paths.styles.src, styles)
gulp.watch(paths.copy.src, copy)
}
export { watchFiles as watch }
export default gulp.series(gulp.parallel(styles, copy), watchFiles)
export const build = gulp.series(clean, gulp.parallel(styles, copy), scripts)