forked from frictionlessdata/datapackage-ui
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
138 lines (108 loc) · 3.52 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
var _ = require('underscore');
var gulp = require('gulp');
var historyApiFallback = require('connect-history-api-fallback');
var browserify = require('browserify');
var browserifyHandlebars = require('browserify-handlebars');
var depcheck = require('depcheck');
// var watchify = require('watchify');
var resolve = require('resolve');
var glob = require('glob').sync;
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var rename = require('gulp-rename');
var ghPages = require('gulp-gh-pages');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var minifyCss = require('gulp-minify-css');
var path = require('path');
var streamqueue = require('streamqueue');
var baseDir = './datapackagist';
var backendDependencies = ['express'];
var srcDir = baseDir + '/src';
var distDir = baseDir + '/dist';
var stylesDir = srcDir + '/styles';
var scriptsDir = srcDir + '/scripts';
var resourcesDir = srcDir + '/resources';
var frontendDependencies = _.chain(require('./package.json').dependencies)
.omit(backendDependencies)
.keys()
.value();
/**
* Provide frontend app as a single bundle.
*/
var bundler = browserify({
entries: [
scriptsDir + '/app.js',
// glob(scriptsDir + '/components/*.js')
],
transform: ['browserify-handlebars'],
debug: true,
cache: {},
packageCache: {},
fullPaths: true
});
// Don't include vendor dependencies in this bundle
bundler.external(frontendDependencies);
function scriptPipeline(bundle, outfile, options) {
/**
* Run and return the scripts pipeline on bundle
*/
console.log('Bundling: ' + outfile);
var outBundle = bundle.pipe(source(outfile)).pipe(buffer());
if(options && options.uglify)
outBundle = outBundle.pipe(uglify());
return outBundle.pipe(gulp.dest(distDir));
}
gulp.task('vendor-scripts', function () {
/**
* Provide frontend dependencies as a single bundle.
*/
var bundler = browserify({});
frontendDependencies.forEach(function (id) {
bundler.require(resolve.sync(id), {expose: id});
});
return scriptPipeline(bundler.bundle(), 'vendor.min.js', {uglify: false});
});
gulp.task('app-scripts', function() {
return scriptPipeline(bundler.bundle(), 'app.min.js', {uglify: false});
});
// gulp.task('app-scripts-watched', function() {
// var watcher = watchify(bundler);
//
//
// watcher
// .on('update', function() {
// scriptPipeline(watcher.bundle(), 'app.min.js');
// });
//
// return scriptPipeline(watcher.bundle(), 'app.min.js');
// });
gulp.task('check-deps', function () {
depcheck(path.resolve('./'), {
'withoutDev': false,
'ignoreDirs': ['dist', 'node_modules']
}, function(U) {
if(!_.isEmpty(U.dependencies))
console.error('Unused dependencies: ', U.dependencies.join(', '));
if(!_.isEmpty(U.devDependencies))
console.error('Unused dev dependencies: ', U.devDependencies.join(', '));
if(!_.isEmpty(U.invalidFiles))
console.error('JS files that couldn\'t be parsed: ', U.invalidFiles.join(', '));
});
});
gulp.task('styles', function () {
/**
* Provide frontend styles as a single bundle.
*/
return streamqueue(
{objectMode: true},
gulp.src(stylesDir + '/app.css'),
gulp.src(stylesDir + '/custom.css'),
gulp.src('*/highlight.js/src/styles/default.css')
)
.pipe(concat('app.min.css'))
.pipe(minifyCss({compatibility: 'ie8'}))
.pipe(gulp.dest(distDir));
});
gulp.task('default', ['vendor-scripts', 'app-scripts', 'styles']);
gulp.task('dev', ['vendor-scripts', 'app-scripts-watched', 'styles']);