-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
147 lines (130 loc) · 4.09 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
'use strict';
const gulp = require('gulp'), //task runner
del = require('del'), //clean previously built code
less = require('gulp-less'), //compile less code into css files
cssmin = require('gulp-minify-css'), //minify css files
browserify = require('browserify'), //let you require node modules in the browser
uglify = require('gulp-uglify'), //uglify js files
concat = require('gulp-concat'), //concatenates files
eslint = require('gulp-eslint'), //lint JS files
source = require('vinyl-source-stream'), //convert normal text to vinyl stream
buffer = require('vinyl-buffer'), //convert to a buffered stream which is expected by most gulp tasks
babelify = require('babelify'), // browserify transform for babel , transpiles es6 to es5
history = require('connect-history-api-fallback'), //middleware to proxy request through a specified index page
connect = require('gulp-connect'), //webserver which automatically refresh when code is rebuilt
open = require('gulp-open'), //Open a Url in a web browser
runSequence = require('run-sequence'); //run tasks synchronously
const config = {
port: 9000,
devBaseUrl: 'http://localhost',
paths: {
html: './src/*.html',
fonts: [
'./node_modules/react-widgets/dist/fonts/*.*'
],
js: './src/**/*.js',
css: [
'./src/*.css',
'./node_modules/react-input-calendar/styles/input-calendar.css',
'./node_modules/react-select/dist/react-select.min.css',
'./node_modules/react-widgets/dist/css/*.css'
],
destination: {folder: './dist', css: 'bundle.css', js: 'bundle.js'},
origin: './src/main.js'
}
};
/**
* Cleaning dist/ folder
*/
gulp.task('clean', (cb) => {
return del(['dist/**'], cb);
})
/**
* Running livereload server
*/
.task('server', () => {
connect.server({
root: ['dist'],
port: config.port,
base: config.devBaseUrl,
livereload: true,
middleware: function(connect, opt) {
return [history()];
}
});
})
.task('open', ['server'], () => {
gulp.src ('dist/index.html')
.pipe(open({uri: config.devBaseUrl + ":" + config.port + '/'}))
})
/**
* html
*/
.task('html', () => {
gulp.src(config.paths.html)
.pipe(gulp.dest(config.paths.destination.folder))
.pipe(connect.reload());
})
/**
* Less compilation
*/
.task('less', () => {
gulp.src(config.paths.css)
.pipe(less())
.pipe(concat(config.paths.destination.css))
.pipe(gulp.dest(config.paths.destination.folder + '/css'))
.pipe(connect.reload());
})
.task('less:min', () => {
gulp.src(config.paths.css)
.pipe(less())
.pipe(concat(config.paths.destination.css))
.pipe(cssmin())
.pipe(gulp.dest(config.paths.destination.folder + '/css'))
.pipe(connect.reload());
})
/**
* ESLint validation
*/
.task('eslint', () => {
return gulp.src(config.paths.js)
.pipe(eslint({config: 'eslint.config.json'}))
.pipe(eslint.format());
})
/** JavaScript compilation */
.task('js', () => {
browserify(config.paths.origin, {debug: true}) //enables source maps
.transform(babelify)
.bundle() //bundle into a single js file
.on('error', console.error.bind(console))
.pipe(source(config.paths.destination.js))
.pipe(gulp.dest(config.paths.destination.folder + '/scripts'))
.pipe(connect.reload());
})
.task('js:min', () => {
browserify(config.paths.origin)
.transform(babelify)
.bundle()
.pipe(source(config.paths.destination.js))
.pipe(buffer())
.pipe(uglify())
.pipe(gulp.dest(config.paths.destination.folder + '/scripts'))
.pipe(connect.reload());
})
/**
* fonts
*/
.task('fonts', () => {
gulp.src(config.paths.fonts)
.pipe(gulp.dest(config.paths.destination.folder + '/fonts'))
})
/**
* Compiling resources and serving application
*/
.task('watch', () => {
gulp.watch(config.paths.html, ['html']);
gulp.watch(config.paths.js, ['js', 'eslint']);
gulp.watch(config.paths.css, ['less']);
})
.task('default', () => runSequence('clean', 'html', 'fonts', 'eslint', 'less', 'js', 'open', 'watch'))
.task('serve:minified', () => runSequence('clean', 'html', 'fonts', 'eslint', 'less:min', 'js:min', 'open', 'watch'));