-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
119 lines (104 loc) · 4.63 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
"use strict";
const gulp = require('gulp');
const mainNpmFiles = require('npmfiles');
const plugins = require('gulp-load-plugins')(/*{DEBUG: true}*/);
const lazypipe = require('lazypipe');
//nop/noop ; filter ;
const del = require('del');
//const once = require('async-once');
const browserSync = require('browser-sync').create();
const options = require("minimist")(process.argv.slice(2));
const buildFolder = "vendor";
/* verify coherence of parameters */
options.production = !(!options.production); //init or convert to boolean
options.development = !(!options.development); //init or convert to boolean
if(options.production && options.development) //priority
options.development = false;
else if(!options.production && !options.development) { //cmd priority on env
options.development = !process.env.NODE_ENV; //default value if not defined
options.production = !options.development;
}
console.log("ENV production = " + options.production);
console.log("ENV development = " + options.development);
function gfn(_name, fn, _description, _flags) {
if(_name) fn.displayName = fn.taskName = _name;
if(_description) fn.description = _description;
if(_flags) fn.flags = _flags;
return fn;
}
gulp.task(gfn('build:deps', function build_deps() {
return gulp.src(mainNpmFiles())
.pipe(!options.production ? plugins.plumber() : plugins.noop())
//.pipe(plugins.sourcemaps.init({loadMaps: true}))
.pipe(options.production ? plugins.ignore("*.map") : plugins.noop())
.pipe(plugins.debug({title: 'deps-debug'/*, showFiles: false*/}))
//.pipe(3rd)
//.pipe(plugins.sourcemaps.write())
.pipe(!options.production ? plugins.plumber.stop() : plugins.noop())
.pipe(gulp.dest(buildFolder+'/libs'));
},
'Copy third party libraries from /node_modules into /{buildFolder}'));
gulp.task(gfn('build:src', function build_src() {
return gulp.src('./src/**/*')
.pipe(!options.production ? plugins.plumber() : plugins.noop())
.pipe(plugins.debug({title: 'src-debug'}))
.pipe(plugins.sourcemaps.init())
//.pipe(3rd)
.pipe(plugins.sourcemaps.write())
.pipe(!options.production ? plugins.plumber.stop() : plugins.noop())
.pipe(gulp.dest('./'+buildFolder))
.pipe(plugins.debug({title: 'dest-debug'}))
.pipe(plugins.preservetime());
},
'Copy source files from /src into /{buildFolder}'));
gulp.task(gfn('vendor', gulp.parallel('build:src'), 'Alias for legacy'));
gulp.task(gfn('build', gulp.series('build:deps', 'build:src'), 'Builds entire project.\nDefine environment in NODE_ENV env or by argument.', {
'--development': 'If build for development (default)',
'--production': 'If build for production environment'
}));
// Default task
//gulp.task('default', plugins.taskListing); //TODO: find how show --tasks of gulp-cli
gulp.task(gfn('clean:build', function clean_build() {
return del(['./'+buildFolder]);
},
'Delete dev build folder'));
gulp.task(gfn('clean:dist', function clean_dist() { //once(function(done) {
return del(['./dist']/*, done*/);
},
'Delete release folder'));
gulp.task(gfn('clean', gulp.parallel('clean:build', 'clean:dist'), 'Full clean'));
gulp.task(gfn('dist', gulp.series('clean', 'build', function dist() {
return gulp.src('./'+buildFolder+'/**/*')
.pipe(plugins.mirror(
plugins.hashsum({/*dest: "dist", force: true,*/ stream: true, hash: "md5"}),
plugins.hashsum({/*dest: "dist", force: true,*/ stream: true, hash: "sha1"})
))
.pipe(plugins.dedupe())
.pipe(plugins.debug({title: 'dist-todo'}))
.pipe(plugins.mirror(
plugins.zip("ideal-webapp-dist.zip"),
lazypipe().pipe(plugins.tar, "ideal-webapp-dist.tar").pipe(plugins.gzip)()
))
.pipe(plugins.debug({title: 'dist-debug'}))
.pipe(gulp.dest("dist"));
}),
'For release'));
// Configure the browserSync task
gulp.task('browserSync', function browserSync() {
return browserSync.init({
server: {
baseDir: "./"+buildFolder
}
});
});
gulp.task(gfn('dev', gulp.series('build', 'browserSync', function dev(done) {
gulp.watch('./src/**/*', ['build:src']);
gulp.watch('./bower.json', ['build:deps']);
gulp.watch('./'+buildFolder+'/**/*', browserSync.reload);
done();
}),
'Dev task\nWhile open the website in the navigator and refresh each time sources were modified'));
/*
const util = require('util');
console.warn(util.inspect());
*/