Project for the UPV to develop an app like BlaBlaCar but only for UPV people.
1'use strict';
2var gulp = require('gulp');
3var sass = require('gulp-sass');
4var rename = require("gulp-rename");
5var uglify = require('gulp-uglify');
6var beautify = require('gulp-beautify');
7var gulpif = require('gulp-if');
8var util = require('gulp-util');
9var browserify = require('browserify');
10var watchify = require('watchify');
11var babelify = require('babelify');
12var source = require('vinyl-source-stream');
13var buffer = require('vinyl-buffer');
14var imagemin = require('gulp-imagemin');
15
16var config = require('./package.json');
17
18
19// Helper for handle static paths
20// -----------------------------------------------------------------------------
21var pathsConfig = function (appName) {
22 var app = appName || config.name;
23 return {
24 app: app,
25 templates: app + '/templates',
26 dist: {
27 base: app + '/static/dist/',
28 css: app + '/static/dist/css',
29 fonts: app + '/static/dist/fonts',
30 images: app + '/static/dist/img',
31 js: app + '/static/dist/js'
32 },
33 src: {
34 sass: app + '/static/src/sass',
35 fonts: app + '/static/src/fonts',
36 images: app + '/static/src/img',
37 js: app + '/static/src/js'
38 },
39 manageScript: app + 'manage.py'
40 }
41};
42
43
44// CSS Task
45// -----------------------------------------------------------------------------
46var cssTask = function (options) {
47
48 // Default include node_modules to SASS include paths
49 var sassOptions = {
50 includePaths: ['./node_modules/'],
51 errLogToConsole: true
52 };
53
54 // Common 'run' code for each options
55 var run = function (options) {
56 options = sassOptions || options;
57 gulp.src(pathsConfig().src.sass + '/project.scss')
58 .pipe(sass(options).on('error', sass.logError))
59 .pipe(rename('bundle.css'))
60 .pipe(gulp.dest(pathsConfig().dist.css));
61 };
62
63 // Run for development with watch
64 if (options.development) {
65 run();
66 gulp.watch(options.watch, run);
67 // Run for production with compressed
68 } else {
69 run({outputStyle: 'compressed'});
70 }
71
72};
73
74// Images Task
75// -----------------------------------------------------------------------------
76var imagesTask = function (options) {
77 var run = function () {
78 gulp.src(pathsConfig().src.images + '**/*')
79 .pipe(imagemin())
80 .pipe(gulp.dest(pathsConfig().dist.base));
81 };
82
83 // Run for development with watch
84 if (options.development) {
85 run();
86 gulp.watch(options.watch, run);
87 // Run for production with compressed
88 } else {
89 run();
90 }
91};
92
93// Fonts Task
94// -----------------------------------------------------------------------------
95var fontsTask = function (options) {
96 var run = function () {
97 gulp.src(pathsConfig().src.fonts + '**/*')
98 .pipe(gulp.dest(pathsConfig().dist.base));
99 };
100
101 // Run for development with watch
102 if (options.development) {
103 run();
104 gulp.watch(options.watch, run);
105 // Run for production with compressed
106 } else {
107 run();
108 }
109};
110
111// App Task
112// -----------------------------------------------------------------------------
113// Task to build a bundle.js file with all the JavaScript code of the app,
114// using browserify.
115var appTask = function (options) {
116
117 // App bundle creator
118 var appBundler = browserify({
119 entries: [options.src],
120 transform: [babelify],
121 debug: options.development,
122 cache: {},
123 packageCache: {},
124 fullPaths: options.development
125 });
126
127 // The bundle process
128 var bundle = function () {
129 return appBundler.bundle()
130 .on('error', util.log)
131 .pipe(source('app.js'))
132 .pipe(buffer())
133 .pipe(gulpif(!options.development, uglify(), beautify()))
134 .pipe(rename('bundle.js'))
135 .pipe(gulp.dest(options.dist))
136 };
137
138 // Fire up watchify when developing
139 if (options.development) {
140 appBundler = watchify(appBundler);
141 appBundler.on('update', bundle);
142 }
143
144 // Call to create bundle
145 bundle();
146};
147
148// Default Task
149// -----------------------------------------------------------------------------
150// Starts our development workflow
151gulp.task('default', function () {
152 cssTask({
153 watch: pathsConfig().src.sass + "/**/*.scss",
154 development: true
155 });
156 appTask({
157 src: pathsConfig().src.js + "/app.js",
158 dist: pathsConfig().dist.js,
159 development: true
160 });
161 imagesTask({
162 development: false,
163 watch: pathsConfig().src.images + "/**/*"
164 });
165 fontsTask({
166 development: false,
167 watch: pathsConfig().src.fonts + "/**/*"
168 });
169});
170
171// Deploy Task
172// -----------------------------------------------------------------------------
173gulp.task('deploy', function () {
174 cssTask({
175 development: false
176 });
177 appTask({
178 src: pathsConfig().src.js + "/app.js",
179 dist: pathsConfig().dist.js,
180 development: false
181 });
182 imagesTask({
183 development: false
184 });
185 fontsTask({
186 development: false
187 });
188});