-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
151 lines (136 loc) · 4.19 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
148
149
150
151
'use strict';
var gulp = require('gulp'),
connect = require('gulp-connect'),
stylus = require('gulp-stylus'),
nib = require('nib'),
jshint = require('gulp-jshint'),
stylish = require('jshint-stylish'),
inject = require('gulp-inject'),
wiredep = require('wiredep').stream,
gulpif = require('gulp-if'),
minifyCss = require('gulp-minify-css'),
useref = require('gulp-useref'),
uglify = require('gulp-uglify'),
uncss = require('gulp-uncss'),
imagemin = require('gulp-imagemin'),
pngcrush = require('imagemin-pngcrush'),
historyApiFallback = require('connect-history-api-fallback');
// Servidor web de desarrollo
gulp.task('server', function() {
connect.server({
root: './app',
hostname: '0.0.0.0',
port: 8080,
livereload: true,
middleware: function(connect, opt) {
return [ historyApiFallback ];
}
});
});
// Servidor web para probar el entorno de producción
gulp.task('server-dist', function() {
connect.server({
root: './dist',
hostname: '0.0.0.0',
port: 8080,
livereload: true,
middleware: function(connect, opt) {
return [ historyApiFallback ];
}
});
});
// Busca errores en el JS y nos los muestra por pantalla
gulp.task('jshint', function() {
return gulp.src('./app/scripts/**/*.js')
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('jshint-stylish'))
.pipe(jshint.reporter('fail'));
});
// Preprocesa archivos Stylus a CSS y recarga los cambios
gulp.task('css', function() {
gulp.src('./app/stylesheets/main.styl')
.pipe(stylus({ use: nib() }))
.pipe(gulp.dest('./app/stylesheets'))
.pipe(connect.reload());
});
// Recarga el navegador cuando hay cambios en el HTML
gulp.task('html', function() {
gulp.src('./app/**/*.html')
.pipe()
.pipe(connect.reload());
});
// Busca en las carpetas de estilos y javascript los archivos
// para inyectarlos en el index.html
gulp.task('inject', function() {
return gulp.src('index.html', {cwd: './app'})
.pipe(inject(
gulp.src(['./app/scripts/**/*.js']), {
read: false,
ignorePath: '/app'
}))
.pipe(inject(
gulp.src(['./app/stylesheets/**/*.css']), {
read: false,
ignorePath: '/app'
}
))
.pipe(gulp.dest('./app'));
});
// Inyecta las librerias que instalemos vía Bower
gulp.task('wiredep', function () {
gulp.src('./app/index.html')
.pipe(wiredep({
directory: './app/lib'
}))
.pipe(gulp.dest('./app'));
});
// Comprime los archivos CSS y JS enlazados en el index.html
// y los minifica.
gulp.task('compress', function() {
gulp.src('./app/index.html')
.pipe(useref.assets())
.pipe(gulpif('*.js', uglify({mangle: false })))
.pipe(gulpif('*.css', minifyCss()))
.pipe(gulp.dest('./dist'));
});
// Elimina el CSS que no es utilizado para reducir el peso del archivo
gulp.task('uncss', function() {
gulp.src('./dist/css/style.min.css')
.pipe(uncss({
html: ['./app/index.html']
}))
.pipe(gulp.dest('./dist/css'));
});
// Copia el contenido de los estáticos e index.html al directorio
// de producción sin tags de comentarios
gulp.task('copy', function() {
gulp.src('./app/index.html')
.pipe(useref())
.pipe(gulp.dest('./dist'));
gulp.src('./app/favicon.ico')
.pipe(gulp.dest('./dist'));
//gulp.src('./app/lib/fontawesome/fonts/**')
//.pipe(gulp.dest('./dist/fonts'));
gulp.src('./app/img/**')
.pipe(gulp.dest('./dist/img'));
});
// Optimiza imágenes
gulp.task('images', function() {
gulp.src('./app/img/*.{png,jpg,jpeg,gif,svg}')
.pipe(imagemin({
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngcrush()]
}))
.pipe(gulp.dest('./dist/img'));
});
// Vigila cambios que se produzcan en el código
// y lanza las tareas relacionadas
gulp.task('watch', function() {
gulp.watch(['./app/**/*.html'], ['html']);
gulp.watch(['./app/stylesheets/**/*.styl'], ['css', 'inject']);
gulp.watch(['./app/scripts/**/*.js', './Gulpfile.js'], ['jshint', 'inject']);
gulp.watch(['./bower.json'], ['wiredep']);
});
gulp.task('default', ['server', 'inject', 'wiredep', 'watch']);
gulp.task('build', ['images', 'compress', 'copy', 'uncss']);