-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgulpfile.js
More file actions
99 lines (80 loc) · 2.22 KB
/
gulpfile.js
File metadata and controls
99 lines (80 loc) · 2.22 KB
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
var fs = require('fs');
var gulp = require('gulp');
var gutil = require('gulp-util');
var mkdirp = require('mkdirp');
var webpack = require('webpack');
var uglify = require('uglify-js');
var NAME = 'jform';
var ENTRY = './src/jform.js';
var HEADER = './src/header.js';
var DIST = './dist';
// generate banner with today's date and correct version
function createBanner() {
var today = gutil.date(new Date(), 'yyyy-mm-dd'); // today, formatted as yyyy-mm-dd
var version = require('./package.json').version; // math.js version
return String(fs.readFileSync(HEADER))
.replace('@@date', today)
.replace('@@version', version);
}
var bannerPlugin = new webpack.BannerPlugin(createBanner(), {
entryOnly: true,
raw: true
});
// create a single instance of the compiler to allow caching
var compiler = webpack({
entry: ENTRY,
output: {
library: 'jfrom',
libraryTarget: 'umd',
path: DIST,
filename: NAME + '.js'
},
plugins: [bannerPlugin],
module: {
loaders: [
{test: /\.json$/, loader: "json"}
]
},
cache: true
});
gulp.task('copy', ['minify'], function() {
gulp
.src([DIST + '/*'])
.pipe(gulp.dest('docs/js'));
});
// make dist folder structure
gulp.task('mkdir', function () {
mkdirp.sync(DIST);
});
// bundle javascript
gulp.task('bundle', ['mkdir'], function (done) {
// update the banner contents (has a date in it which should stay up to date)
bannerPlugin.banner = createBanner();
compiler.run(function (err) {
if (err) {
gutil.log(err);
}
gutil.log('bundled ' + NAME + '.js');
done();
});
});
gulp.task('minify', ['bundle'], function () {
var result = uglify.minify([DIST + '/' + NAME + '.js'], {
outSourceMap: NAME + '.map',
output: {
comments: /@license/,
max_line_len: 64000
}
});
var fileMin = DIST + '/' + NAME + '.min.js';
var fileMap = DIST + '/' + NAME + '.map';
fs.writeFileSync(fileMin, result.code);
fs.writeFileSync(fileMap, result.map);
gutil.log('Minified ' + fileMin);
gutil.log('Mapped ' + fileMap);
});
gulp.task('watch', ['bundle'], function () {
gulp.watch(['src/**/*'], ['bundle', 'minify']);
});
gulp.task('docs', ['bundle', 'minify', 'copy']);
gulp.task('default', ['bundle', 'minify']);