-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
116 lines (103 loc) · 3.15 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
"use strict";
// gulp
var gulp = require('gulp'),
browserSync = require('browser-sync'),
reload = browserSync.reload,
babel = require('gulp-babel'),
del = require('del'),
sass = require('gulp-sass'),
plumber = require('gulp-plumber'),
autoPrefixer = require('autoprefixer-core'),
postcss = require('gulp-postcss'),
minify = require('gulp-minify-css'),
gulpif = require('gulp-if'),
rename = require('gulp-rename'),
browserify = require('browserify'),
babelify = require('babelify'),
source = require('vinyl-source-stream'),
htmlreplace = require('gulp-html-replace');
// environment
var isProduction = false,
$cssRootFolder = 'css',
$javascriptRoot = 'js',
$sassRoot = 'sass',
$srcFolder = 'src',
$buildFolder = 'build',
$javascriptFolder = $srcFolder + '/' + $javascriptRoot,
$cssFolder = $srcFolder + '/' + $cssRootFolder,
$sassFolder = $srcFolder + '/' + $sassRoot;
gulp.task('babelModules', function() {
browserify({
entries: './' + $javascriptFolder + '/App.js',
debug: true
})
.transform(babelify.configure({
sourceMapRelative: $buildFolder + "/" + $javascriptRoot // tells babelify to use this instead of an absolute path in the source map (so you can debug the individual source files)
}))
.bundle()
.pipe(source('bundle.js'))
.pipe(gulp.dest($buildFolder + '/' + $javascriptRoot))
.pipe(reload({stream: true}));
});
gulp.task('css', ['sass'], function () { // don't run css until sass is done
var processors = [
autoPrefixer({browsers: ['last 3 version']})
];
return gulp.src($cssFolder + '/*.css')
.pipe(plumber())
.pipe(postcss(processors))
.pipe(gulp.dest($cssFolder)) // copy to src css folder
.pipe(gulpif(isProduction, minify())) // only if production
.pipe(rename({
suffix: '.min'
}))
.pipe(gulp.dest($buildFolder + '/' + $cssRootFolder)) // copy to build folder css
.pipe(reload({stream: true}));
});
gulp.task('sass', function () {
return gulp.src($sassFolder + '/**/*.scss')
.pipe(plumber())
.pipe(sass({style: 'expanded'}))
.pipe(gulp.dest($cssFolder));
});
gulp.task('watch', function () {
gulp.watch($srcFolder + '/index.html', ['copyHTML']);
gulp.watch($javascriptFolder + '/**/*.js', ['babelModules']);
gulp.watch($sassFolder + '/**/*.scss', ['sass', 'css']);
});
gulp.task('browserSyncServer', function () {
browserSync({
server: {
baseDir: $buildFolder
}
});
});
gulp.task('copyHTML', function () {
gulp.src($srcFolder + '/index.html')
.pipe(plumber())
.pipe(htmlreplace({
'css': $cssRootFolder + '/style.min.css'
}))
.pipe(gulp.dest($buildFolder))
.pipe(reload({stream: true}));
});
gulp.task('clean', function () {
del.sync([$buildFolder]); // del.sync forces del to run synchronously
});
gulp.task('default', [
'clean',
'initialize',
'sass',
'css',
'babelModules',
'browserSyncServer',
'watch'
]);
gulp.task('initialize', ['clean'], function () { // don't run initalize until 'clean' is done
gulp.src($srcFolder + '/index.html')
.pipe(plumber())
.pipe(htmlreplace({
'css': $cssRootFolder + '/style.min.css'
}))
.pipe(gulp.dest($buildFolder));
});