forked from videojs/video.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
138 lines (116 loc) · 3.61 KB
/
Gruntfile.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
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
build: {
dist:{}
},
// Current forEach issue: https://github.com/gruntjs/grunt/issues/610
// npm install https://github.com/gruntjs/grunt-contrib-jshint/archive/7fd70e86c5a8d489095fa81589d95dccb8eb3a46.tar.gz
jshint: {
src: {
src: ["src/js/*.js"],
options: {
jshintrc: ".jshintrc"
}
}
},
compile: {
dist:{
sourcelist: 'dist/sourcelist.txt',
externs: ['src/js/media.flash.externs.js'],
dest: 'dist/video.js'
},
test: {
sourcelist: 'dist/sourcelist.txt',
src: ['test/unit/*.js'],
externs: ['src/js/media.flash.externs.js', 'test/qunit/qunit-externs.js'],
dest: 'test/video.test.js'
}
},
dist: {
latest:{}
},
qunit: {
all: ['test/index.html'],
},
watch: {
files: [ "src/**/*.js" ],
tasks: "dev"
}
});
grunt.loadNpmTasks("grunt-contrib-jshint");
grunt.loadNpmTasks("grunt-contrib-qunit");
grunt.loadNpmTasks("grunt-contrib-watch");
// Default task.
grunt.registerTask('default', ['build', 'jshint', 'compile', 'dist']);
// Development watch task
grunt.registerTask('dev', ['jshint','build']);
grunt.registerTask('test', ['jshint','build','qunit']);
var fs = require('fs'),
gzip = require('zlib').gzip;
grunt.registerMultiTask('build', 'Building Source', function(){
var calcdeps = require('calcdeps').calcdeps;
// caclcdeps is async
var done = this.async();
// In current version of calcdeps, not supplying certain
// options that should have defaults causes errors
// so we have all options listed here with their defaults.
calcdeps({
input: ['src/js/exports.js'],
path:['src/js/'],
dep:[],
exclude:[],
output_mode:'list',
}, function(err,results){
if (err) {
grunt.warn({ message: err })
grunt.log.writeln(err);
done(false);
}
if (results) {
grunt.file.write('dist/sourcelist.txt', results.join(','));
grunt.file.write('dist/sourcelist.js', 'var sourcelist = ["' + results.join('","') + '"]');
}
done();
});
});
grunt.registerMultiTask('compile', 'Minify JS files using Closure Compiler.', function() {
var done = this.async();
var exec = require('child_process').exec;
var externs = this.file.externs || [];
var dest = this.file.dest;
var files = [];
if (this.data.sourcelist) {
files = files.concat(grunt.file.read(this.data.sourcelist).split(','))
}
if (this.file.src) {
files = files.concat(this.file.src);
}
var command = 'java -jar build/compiler/compiler.jar'
+ ' --compilation_level ADVANCED_OPTIMIZATIONS'
// + ' --formatting=pretty_print'
+ ' --js_output_file=' + dest
+ ' --create_source_map ' + dest + '.map --source_map_format=V3'
+ ' --output_wrapper "(function() {%output%})();//@ sourceMappingURL=video.js.map"';
files.forEach(function(file){
command += ' --js='+file;
});
externs.forEach(function(extern){
command += ' --externs='+extern;
});
// grunt.log.writeln(command)
exec(command, { maxBuffer: 500*1024 }, function(err, stdout, stderr){
if (err) {
grunt.warn(err);
done(false);
}
if (stdout) {
grunt.log.writeln(stdout);
}
done();
});
});
grunt.registerMultiTask('dist', 'Creating distribution', function(){
});
};