-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
143 lines (124 loc) · 4.01 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
/*eslint-disable no-console */
// Promise polyfill needed to run PostCSS on node.js 0.10
require('es6-promise').polyfill();
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var handleError;
// Copy
gulp.task('copy', ['sass'], function () {
var es = require('event-stream');
var uglify = require('gulp-uglify');
return es.concat(
// update index.html to work when built
gulp.src(['source/index.html'])
.pipe(gulp.dest('build')),
// copy config-require
gulp.src(['source/js/config-require.js'])
.pipe(plumber(handleError))
.pipe(uglify())
.pipe(gulp.dest('build/js')),
// copy template files
gulp.src(['source/js/**/*.html'])
.pipe(gulp.dest('build/js')),
// copy vendor files
gulp.src(['source/vendor/**/*', '!source/vendor/requirejs/require.js'])
.pipe(gulp.dest('build/vendor')),
// copy assets
gulp.src(['source/assets/**/*'])
.pipe(gulp.dest('build/assets')),
// copy partials
gulp.src(['source/partials/**/*'])
.pipe(gulp.dest('build/partials')),
// minify requirejs
gulp.src(['source/vendor/requirejs/require.js'])
.pipe(plumber(handleError))
.pipe(uglify())
.pipe(gulp.dest('build/vendor/requirejs'))
);
});
// JavaScript
gulp.task('js', function () {
var amdOptimize = require('amd-optimize');
var concat = require('gulp-concat');
var insert = require('gulp-insert');
var ngAnnotate = require('gulp-ng-annotate');
var uglify = require('gulp-uglify');
var config = require('./source/js/config-require.js');
config.baseUrl = 'source';
return gulp.src(['source/js/main.js'])
.pipe(plumber(handleError))
.pipe(amdOptimize('js/main', config))
.pipe(concat('main.js'))
.pipe(insert.append(';require(["js/main"]);'))
.pipe(ngAnnotate())
.pipe(uglify())
.pipe(gulp.dest('build/js/'));
});
gulp.task('lint', function () {
var eslint = require('gulp-eslint');
return gulp.src(['gulpfile.js', 'source/js/**/*.js'])
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failOnError());
});
// Karma
gulp.task('karma', function (done) {
var Server = require('karma').Server;
new Server({
configFile: __dirname + '/karma.conf.js'
}, function () {
done();
}).start();
});
// Sass
gulp.task('sass', function () {
var cssGlobbing = require('gulp-css-globbing');
var postcss = require('gulp-postcss');
var sass = require('gulp-sass');
return gulp.src(['source/sass/*.scss', '!source/sass/_*.scss'])
.pipe(plumber(handleError))
.pipe(cssGlobbing({
extensions: '.scss'
}))
.pipe(sass())
.pipe(postcss([
require('postcss-assets')({
basePath: 'source/',
loadPaths: ['assets/fonts/', 'assets/images/']
}),
require('postcss-import')({
path: 'source/'
}),
require('autoprefixer'),
require('csswring')({
preserveHacks: true,
removeAllComments: true
})
]))
.pipe(gulp.dest('source/assets/css'));
});
// Watch
gulp.task('watch', ['sass', 'lint'], function () {
handleError = function (err) {
console.log(err.name, ' in ', err.plugin, ': ', err.message);
console.log(err.getStack());
this.emit('end');
};
var browserSync = require('browser-sync').create();
gulp.watch('source/sass/**/*.scss', ['sass']);
// enable browserSync
browserSync.init({
server: {
baseDir: './source'
},
browser: 'google chrome'
});
gulp.watch([
'source/assets/*.css',
'source/index.html',
'source/js/**/*',
'!source/js/**/*.spec.js'
]).on('change', browserSync.reload);
});
gulp.task('default', ['js', 'copy'], function () {
});