@@ -9,8 +9,13 @@ var _ = require('lodash'),
9
9
gulp = require ( 'gulp' ) ,
10
10
gulpLoadPlugins = require ( 'gulp-load-plugins' ) ,
11
11
runSequence = require ( 'run-sequence' ) ,
12
- plugins = gulpLoadPlugins ( ) ,
13
- path = require ( 'path' ) ;
12
+ plugins = gulpLoadPlugins ( {
13
+ rename : {
14
+ 'gulp-angular-templatecache' : 'templateCache'
15
+ }
16
+ } ) ,
17
+ path = require ( 'path' ) ,
18
+ endOfLine = require ( 'os' ) . EOL ;
14
19
15
20
// Set NODE_ENV to 'test'
16
21
gulp . task ( 'env:test' , function ( ) {
@@ -38,19 +43,25 @@ gulp.task('nodemon', function () {
38
43
} ) ;
39
44
40
45
// Watch Files For Changes
41
- gulp . task ( 'watch' , function ( ) {
46
+ gulp . task ( 'watch' , function ( ) {
42
47
// Start livereload
43
48
plugins . livereload . listen ( ) ;
44
49
45
50
// Add watch rules
46
- gulp . watch ( defaultAssets . server . gulpConfig , [ 'jshint' ] ) ;
47
51
gulp . watch ( defaultAssets . server . views ) . on ( 'change' , plugins . livereload . changed ) ;
48
52
gulp . watch ( defaultAssets . server . allJS , [ 'jshint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
49
- gulp . watch ( defaultAssets . client . views ) . on ( 'change' , plugins . livereload . changed ) ;
50
53
gulp . watch ( defaultAssets . client . js , [ 'jshint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
51
54
gulp . watch ( defaultAssets . client . css , [ 'csslint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
52
55
gulp . watch ( defaultAssets . client . sass , [ 'sass' , 'csslint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
53
56
gulp . watch ( defaultAssets . client . less , [ 'less' , 'csslint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
57
+
58
+ if ( process . env . NODE_ENV === 'production' ) {
59
+ gulp . watch ( defaultAssets . server . gulpConfig , [ 'templatecache' , 'jshint' ] ) ;
60
+ gulp . watch ( defaultAssets . client . views , [ 'templatecache' , 'jshint' ] ) . on ( 'change' , plugins . livereload . changed ) ;
61
+ } else {
62
+ gulp . watch ( defaultAssets . server . gulpConfig , [ 'jshint' ] ) ;
63
+ gulp . watch ( defaultAssets . client . views ) . on ( 'change' , plugins . livereload . changed ) ;
64
+ }
54
65
} ) ;
55
66
56
67
// CSS linting task
@@ -67,16 +78,29 @@ gulp.task('csslint', function (done) {
67
78
68
79
// JS linting task
69
80
gulp . task ( 'jshint' , function ( ) {
70
- return gulp . src ( _ . union ( defaultAssets . server . gulpConfig , defaultAssets . server . allJS , defaultAssets . client . js , testAssets . tests . server , testAssets . tests . client , testAssets . tests . e2e ) )
81
+ var assets = _ . union (
82
+ defaultAssets . server . gulpConfig ,
83
+ defaultAssets . server . allJS ,
84
+ defaultAssets . client . js ,
85
+ testAssets . tests . server ,
86
+ testAssets . tests . client ,
87
+ testAssets . tests . e2e
88
+ ) ;
89
+
90
+ return gulp . src ( assets )
71
91
. pipe ( plugins . jshint ( ) )
72
92
. pipe ( plugins . jshint . reporter ( 'default' ) )
73
93
. pipe ( plugins . jshint . reporter ( 'fail' ) ) ;
74
94
} ) ;
75
95
76
-
77
96
// JS minifying task
78
97
gulp . task ( 'uglify' , function ( ) {
79
- return gulp . src ( defaultAssets . client . js )
98
+ var assets = _ . union (
99
+ defaultAssets . client . js ,
100
+ defaultAssets . client . templates
101
+ ) ;
102
+
103
+ return gulp . src ( assets )
80
104
. pipe ( plugins . ngAnnotate ( ) )
81
105
. pipe ( plugins . uglify ( {
82
106
mangle : false
@@ -97,6 +121,7 @@ gulp.task('cssmin', function () {
97
121
gulp . task ( 'sass' , function ( ) {
98
122
return gulp . src ( defaultAssets . client . sass )
99
123
. pipe ( plugins . sass ( ) )
124
+ . pipe ( plugins . autoprefixer ( ) )
100
125
. pipe ( plugins . rename ( function ( file ) {
101
126
file . dirname = file . dirname . replace ( path . sep + 'scss' , path . sep + 'css' ) ;
102
127
} ) )
@@ -107,20 +132,39 @@ gulp.task('sass', function () {
107
132
gulp . task ( 'less' , function ( ) {
108
133
return gulp . src ( defaultAssets . client . less )
109
134
. pipe ( plugins . less ( ) )
135
+ . pipe ( plugins . autoprefixer ( ) )
110
136
. pipe ( plugins . rename ( function ( file ) {
111
137
file . dirname = file . dirname . replace ( path . sep + 'less' , path . sep + 'css' ) ;
112
138
} ) )
113
139
. pipe ( gulp . dest ( './modules/' ) ) ;
114
140
} ) ;
115
141
142
+ // Angular template cache task
143
+ gulp . task ( 'templatecache' , function ( ) {
144
+ var re = new RegExp ( '\\' + path . sep + 'client\\' + path . sep , 'g' ) ;
145
+
146
+ return gulp . src ( defaultAssets . client . views )
147
+ . pipe ( plugins . templateCache ( 'templates.js' , {
148
+ root : 'modules/' ,
149
+ module : 'core' ,
150
+ templateHeader : '(function () {' + endOfLine + ' \'use strict\';' + endOfLine + endOfLine + ' angular' + endOfLine + ' .module(\'<%= module %>\'<%= standalone %>)' + endOfLine + ' .run(templates);' + endOfLine + endOfLine + ' templates.$inject = [\'$templateCache\'];' + endOfLine + endOfLine + ' function templates($templateCache) {' + endOfLine ,
151
+ templateBody : ' $templateCache.put(\'<%= url %>\', \'<%= contents %>\');' ,
152
+ templateFooter : ' }' + endOfLine + '})();' + endOfLine ,
153
+ transformUrl : function ( url ) {
154
+ return url . replace ( re , path . sep ) ;
155
+ }
156
+ } ) )
157
+ . pipe ( gulp . dest ( 'build' ) ) ;
158
+ } ) ;
159
+
116
160
// Mocha tests task
117
161
gulp . task ( 'mocha' , function ( done ) {
118
162
// Open mongoose connections
119
163
var mongoose = require ( './config/lib/mongoose.js' ) ;
120
164
var error ;
121
165
122
166
// Connect mongoose
123
- mongoose . connect ( function ( ) {
167
+ mongoose . connect ( function ( ) {
124
168
// Run the tests
125
169
gulp . src ( testAssets . tests . server )
126
170
. pipe ( plugins . mocha ( {
@@ -130,9 +174,9 @@ gulp.task('mocha', function (done) {
130
174
// If an error occurs, save it
131
175
error = err ;
132
176
} )
133
- . on ( 'end' , function ( ) {
177
+ . on ( 'end' , function ( ) {
134
178
// When the tests are done, disconnect mongoose and pass the error state back to gulp
135
- mongoose . disconnect ( function ( ) {
179
+ mongoose . disconnect ( function ( ) {
136
180
done ( error ) ;
137
181
} ) ;
138
182
} ) ;
@@ -165,31 +209,39 @@ gulp.task('protractor', function () {
165
209
} ) ;
166
210
167
211
// Lint CSS and JavaScript files.
168
- gulp . task ( 'lint' , function ( done ) {
212
+ gulp . task ( 'lint' , function ( done ) {
169
213
runSequence ( 'less' , 'sass' , [ 'csslint' , 'jshint' ] , done ) ;
170
214
} ) ;
171
215
172
216
// Lint project files and minify them into two production files.
173
- gulp . task ( 'build' , function ( done ) {
174
- runSequence ( 'env:dev' , 'lint' , [ 'uglify' , 'cssmin' ] , done ) ;
217
+ gulp . task ( 'build' , function ( done ) {
218
+ runSequence ( 'env:dev' , 'lint' , [ 'uglify' , 'cssmin' ] , done ) ;
175
219
} ) ;
176
220
177
221
// Run the project tests
178
- gulp . task ( 'test' , function ( done ) {
222
+ gulp . task ( 'test' , function ( done ) {
179
223
runSequence ( 'env:test' , [ 'karma' , 'mocha' ] , done ) ;
180
224
} ) ;
181
225
226
+ gulp . task ( 'test:server' , function ( done ) {
227
+ runSequence ( 'env:test' , [ 'mocha' ] , done ) ;
228
+ } ) ;
229
+
230
+ gulp . task ( 'test:client' , function ( done ) {
231
+ runSequence ( 'env:test' , [ 'karma' ] , done ) ;
232
+ } ) ;
233
+
182
234
// Run the project in development mode
183
- gulp . task ( 'default' , function ( done ) {
235
+ gulp . task ( 'default' , function ( done ) {
184
236
runSequence ( 'env:dev' , 'lint' , [ 'nodemon' , 'watch' ] , done ) ;
185
237
} ) ;
186
238
187
239
// Run the project in debug mode
188
- gulp . task ( 'debug' , function ( done ) {
240
+ gulp . task ( 'debug' , function ( done ) {
189
241
runSequence ( 'env:dev' , 'lint' , [ 'nodemon' , 'watch' ] , done ) ;
190
242
} ) ;
191
243
192
244
// Run the project in production mode
193
- gulp . task ( 'prod' , function ( done ) {
194
- runSequence ( 'build' , 'env:prod' , 'lint' , [ 'nodemon' , 'watch' ] , done ) ;
245
+ gulp . task ( 'prod' , function ( done ) {
246
+ runSequence ( 'templatecache' , ' build', 'env:prod' , 'lint' , [ 'nodemon' , 'watch' ] , done ) ;
195
247
} ) ;
0 commit comments