/
Gulpfile.js
134 lines (122 loc) · 4 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
var gulp = require("gulp"),
minifyHTML = require("gulp-minify-html"),
concat = require("gulp-concat"),
uglify = require("gulp-uglify"),
cssmin = require("gulp-cssmin"),
uncss = require("gulp-uncss"),
imagemin = require("gulp-imagemin"),
sourcemaps = require("gulp-sourcemaps"),
mainBowerFiles = require("main-bower-files"),
inject = require("gulp-inject"),
less = require("gulp-less"),
filter = require("gulp-filter"),
glob = require("glob"),
browserSync = require("browser-sync");
var config = {
paths: {
html: {
src: "src/**/*.html",
dest: "build"
},
javascript: {
src: ["src/js/**/*.js"],
dest: "build/js"
},
css: {
src: ["src/css/**/*.css"],
dest: "build/css"
},
images: {
src: ["src/images/**/*.jpg", "src/images/**/*.jpeg", "src/images/**/*.png"],
dest: "build/images"
},
less: {
src: ["src/less/**/*.less", "!src/less/includes/**"],
dest: "build/css"
},
bower: {
src: "bower_components",
dest: "build/lib"
},
verbatim: {
src: ["src/manifest.json", "src/favicon.png"],
dest: "build"
}
}
};
gulp.task("html", function(){
return gulp.src(config.paths.html.src)
.pipe(inject(
gulp.src(
mainBowerFiles(),
{read: false, cwd: "bower_components"}
),
{name: "bower", addPrefix: "lib"}
))
.pipe(minifyHTML())
.pipe(gulp.dest(config.paths.html.dest));
});
gulp.task("scripts", function(){
return gulp.src(config.paths.javascript.src)
.pipe(sourcemaps.init())
.pipe(concat("app.min.js"))
.pipe(uglify())
.pipe(sourcemaps.write())
.pipe(gulp.dest(config.paths.javascript.dest));
});
gulp.task("css", function(){
return gulp.src(config.paths.css.src)
.pipe(sourcemaps.init())
.pipe(cssmin())
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(config.paths.css.dest))
.pipe(browserSync.reload({stream: true}));
});
gulp.task("images", function(){
return gulp.src(config.paths.images.src)
.pipe(imagemin({
progressive: true,
interlaced: true
}))
.pipe(gulp.dest(config.paths.images.dest));
});
gulp.task("bower", function(){
return gulp.src(mainBowerFiles(), {base: "bower_components"})
.pipe(gulp.dest(config.paths.bower.dest));
});
gulp.task("less", function(){
return gulp.src(config.paths.less.src)
.pipe(sourcemaps.init())
.pipe(less({
paths: ["bower_components/bootstrap/less"]
}))
.pipe(uncss({
html: glob.sync(config.paths.html.src),
}))
.pipe(concat("main.min.css"))
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(config.paths.css.dest))
.pipe(filter("**/*.css"))
.pipe(browserSync.reload({stream: true}));
});
gulp.task("verbatim", function(){
gulp.src(config.paths.verbatim.src)
.pipe(gulp.dest(config.paths.verbatim.dest));
});
gulp.task("browser-sync", function() {
browserSync({
server: {
baseDir: "./build"
}
});
});
gulp.task("build", ["bower", "html", "scripts", "css", "less", "images", "verbatim"]);
gulp.task("default", ["build", "browser-sync"], function(){
gulp.watch(config.paths.html.src, ["html", browserSync.reload]);
gulp.watch(config.paths.javascript.src, ["scripts", browserSync.reload]);
gulp.watch(config.paths.bower.src, ["bower", browserSync.reload]);
gulp.watch(config.paths.images.src, ["images", browserSync.reload]);
gulp.watch(config.paths.verbatim.src, ["verbatim", browserSync.reload]);
gulp.watch(config.paths.css.src, ["css"]);
gulp.watch(config.paths.less.src, ["less"]);
});