-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgulpfile.js
120 lines (105 loc) · 2.84 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
const gulp = require('gulp')
const pump = require('pump')
const browserify = require('browserify')
const clean = require('del')
const gulpLoadPlugins = require('gulp-load-plugins')
const $ = gulpLoadPlugins()
const { src, build, styles, js, svg } = require('./config')
process.env.NODE_ENV = 'development'
gulp.task('sass', () => {
if (process.env.NODE_ENV === 'development') {
return gulp.src(`${src}/${styles.src}/main.scss`)
.pipe($.sourcemaps.init())
.pipe($.sass({ outputStyle: 'compressed' }).on('error', $.sass.logError))
.pipe($.rename('style.css'))
.pipe($.size({title: 'styles'}))
.pipe($.sourcemaps.write('./'))
.pipe(gulp.dest(`${build}/${styles.build}`))
}
const AUTOPREFIXER_BROWSERS = [
'ie >= 10',
'ie_mob >= 10',
'ff >= 30',
'chrome >= 34',
'safari >= 7',
'opera >= 23',
'ios >= 7',
'android >= 4.4',
'bb >= 10'
]
return gulp.src(`${src}/${styles.src}/main.scss`)
.pipe($.sass({ outputStyle: 'compressed' }).on('error', $.sass.logError))
.pipe($.autoprefixer({
browsers: AUTOPREFIXER_BROWSERS
}))
.pipe($.size({title: 'styles'}))
.pipe($.rename('style.css'))
.pipe(gulp.dest(`${build}/${styles.build}`))
})
gulp.task('js', () => {
pump([
gulp.src(`${src}/${js.src}/*.js`, {read: false}),
$.tap(file => {
$.util.log(`bundling ${file.path}`)
file.contents = browserify(file.path, {debug: true}).bundle()
}),
$.buffer(),
$.sourcemaps.init({ loadMaps: true }),
$.uglify(),
$.sourcemaps.write('./'),
gulp.dest(`${build}/${js.build}`)
])
})
gulp.task('sprite', () => {
return gulp.src(`${src}/${svg.src}/*.svg`)
.pipe($.svgSprites({
mode: 'symbols',
common: 'svg',
svgId: 'svg-%f',
preview: { symbols: 'index.html' },
svg: { symbols: 'symbols.svg' },
templates: { scss: true }
}))
.pipe(gulp.dest(`${build}/${svg.build}`))
})
const { cyan, yellow } = $.util.colors
const logChange = e => $.util.log(
'File',
cyan(e.path.split('\\').pop()),
yellow(e.event)
)
// Watchers
gulp.task('sass:watch', () => {
$.watch(`${src}/${styles.src}/**/*.scss`, () => {
gulp.start('sass')
})
})
gulp.task('js:watch', () => {
$.watch(`${src}/${js.src}/**/*.js`, () => {
gulp.start('js')
})
})
gulp.task('svg:watch', () => {
$.watch(`${src}/${svg.src}/*.svg`, e => {
logChange(e)
gulp.start('sprite')
})
})
// Util tasks
gulp.task('clean', () => {
process.env.NODE_ENV = 'production'
clean.sync([
`${build}/${styles.build}/*`,
`${build}/${svg.build}/*`
], { force: true })
})
gulp.task('serve', () => {
gulp.src('./')
.pipe($.webserver({
livereload: true,
fallback: './index.html',
open: true
}))
})
gulp.task('default', ['sass:watch', 'js:watch', 'svg:watch'])
gulp.task('build', ['clean', 'sass', 'js', 'sprite'])