-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
121 lines (107 loc) · 5.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
const gulp = require('gulp');
const argv = require('yargs').argv;
const browserify = require('browserify');
const plugins = require('gulp-load-plugins')({lazy: true});
const BUILD_PATH = './client/public/build/';
gulp.task('test', () => {
console.log('hello i am a test gulp task');
});
// testing a programmatic way to add a view to basicMEAN
// TODO: add to config.js
// TODO: find a way to add the js file to the layout file programmatically
gulp.task('add-view', () => {
let viewName = argv.name ? argv.name.toLowerCase() : null;
let protectedView = false;
if (!viewName || viewName.length < 2) {
console.log('Invalid view name provided, exiting gulp task.');
return;
}
let destFolder = './client/ng-client/view-' + viewName + '/';
plugins.file('View'+viewName[0].toUpperCase()+viewName.substr(1)+'Ctrl.js',
"angular.module('basicMEAN')\n.controller('"+
'View'+viewName[0].toUpperCase()+viewName.substr(1)+'Ctrl' +"', function () {\n});",
{src: true})
.pipe(gulp.dest(destFolder));
return plugins.file('view-' + viewName + '.pug', '', {src: true})
.pipe(gulp.dest(destFolder));
});
gulp.task('js-concat-minify', () => {
// EXAMPLE: (TODO: switch to using the concat file in layout.pug)
// concat all angular js files, while controlling the order of files
let js = gulp.src(['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'])
.pipe(plugins.concat('ng-client.js'));
let uglify = plugins.uglifyEs.default;
return js
.pipe(gulp.dest('./client/public/build/js/'))
.pipe(uglify())
.pipe(gulp.dest('./client/public/build/min-js/'));
});
const buildUtil = {
buildWithoutMinifyJs: function (jsFilesGlob, concatFileName) {
let jsFiles = gulp.src(jsFilesGlob);
return jsFiles.pipe(plugins.concat(`${concatFileName}.js`));
},
buildAndMinifyJs : function (jsFilesGlob, concatFileName) {
return buildUtil.buildWithoutMinifyJs(jsFilesGlob, concatFileName)
.pipe(plugins.uglifyEs.default());
},
buildRequireBundle: function (requireFilesGlob, concatFileName) {
return gulp.src(requireFilesGlob)
.pipe(plugins.tap(function (file) {
// replace file contents with browserify's bundle stream
file.contents = browserify(file.path, {debug: true}).bundle();
}))
// transform streaming contents into buffer contents for gulp-sourcemaps & gulp-concat
.pipe(plugins.buffer())
.pipe(plugins.concat(`${concatFileName}.js`))
// load and init sourcemaps
.pipe(plugins.sourcemaps.init({loadMaps: true}))
.pipe(plugins.uglifyEs.default({mangle: false}))
// write sourcemaps to path relative to destination
.pipe(plugins.sourcemaps.write('./'))
}
};
gulp.task('build-require-bundle', () => {
let requirefilesGlob = ['./client/public/js/requires/*.js'];
return buildUtil.buildRequireBundle(requirefilesGlob, 'require-bundle')
.pipe(gulp.dest(BUILD_PATH));
});
gulp.task('build-minify-ng-client', ['build-require-bundle'], () => {
let angularfilesGlob = ['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'];
return buildUtil.buildAndMinifyJs(angularfilesGlob, 'ng-client')
.pipe(gulp.dest(BUILD_PATH));
});
// use this to test the production minified js
gulp.task('watch-minify-angular', ['build-minify-ng-client'], () => {
let angularfilesGlob = ['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'];
return plugins.watch(angularfilesGlob, () => {
console.log('rebuilding: %s', new Date());
return buildUtil.buildAndMinifyJs(angularfilesGlob, 'ng-client')
.pipe(gulp.dest(BUILD_PATH));
});
});
gulp.task('build-nominify-ng-client', ['build-require-bundle'], () => {
let angularfilesGlob = ['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'];
return buildUtil.buildWithoutMinifyJs(angularfilesGlob, 'ng-client')
.pipe(gulp.dest(BUILD_PATH));
});
// use this in development so you can debug the js easily in a browser
gulp.task('watch-angular', ['build-nominify-ng-client'], () => {
let angularfilesGlob = ['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'];
return plugins.watch(angularfilesGlob, () => {
console.log('rebuilding: %s', new Date());
return buildUtil.buildWithoutMinifyJs(angularfilesGlob, 'ng-client')
.pipe(gulp.dest(BUILD_PATH));
});
});
gulp.task('inject-test', () => {
let angularJsFiles = gulp.src(['./client/ng-client/**/*.js', './client/ng-client-secure/**/*.js'], {read: true})
.pipe(plugins.concat('ng-client.js'))
.pipe(plugins.uglifyEs.default())
.pipe(plugins.rename('ng-client.min.js'))
.pipe(gulp.dest(BUILD_PATH));
let target = gulp.src('./server/views/layout.pug');
return target
.pipe(plugins.inject(angularJsFiles, {ignorePath:['client', 'public']}))
.pipe(gulp.dest('./server/views/'));
});