forked from summernote/summernote
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
143 lines (124 loc) · 3.33 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
139
140
141
142
143
module.exports = function (grunt) {
'use strict';
/**
* read optional JSON from filepath
* @param {String} filepath
* @return {Object}
*/
var readOptionalJSON = function (filepath) {
var data = {};
try {
data = grunt.file.readJSON(filepath);
// The concatenated file won't pass onevar
// But our modules can
delete data.onever;
} catch (e) { }
return data;
};
grunt.initConfig({
// package File
pkg: grunt.file.readJSON('package.json'),
// bulid source(grunt-build.js).
build: {
all: {
baseUrl: 'src/js', // base url
startFile: 'intro.js', // intro part
endFile: 'outro.js', // outro part
outFile: 'dist/summernote.js' // out file
}
},
// for javascript convention.
jshint: {
all: {
src: [
'src/**/*.js',
'plugin/**/*.js',
'lang/**/*.js',
'Gruntfile.js',
'test/**/*.js',
'build/*.js'
],
options: {
jshintrc: true
}
},
dist: {
src: 'dist/summernote.js',
options: readOptionalJSON('.jshintrc')
}
},
// qunit: javascript unit test.
qunit: {
all: [ 'test/*.html' ]
},
// uglify: minify javascript
uglify: {
all: {
files: { 'dist/summernote.min.js': ['dist/summernote.js'] }
}
},
// recess: minify stylesheets
recess: {
dist: {
options: { compile: true, compress: true },
files: {
'dist/summernote.css': ['src/less/summernote.less']
}
}
},
// connect configuration.
connect: {
all: {
options: {
port: 3000,
livereload: true,
middleware: function (connect, options, middlewares) {
var base = options.base[0];
middlewares = middlewares || [];
return middlewares.concat([
require('connect-livereload')(), // livereload middleware
connect['static'](base), // serve static files
connect.directory(base) // make empty directories browsable
]);
},
open: 'http://localhost:3000'
}
}
},
// watch source code change
watch: {
all: {
files: ['src/less/*.less', 'src/js/**/*.js'],
tasks: ['recess', 'jshint', 'qunit'],
options: {
livereload: true
}
}
},
// Meteor commands to test and publish package
exec: {
'meteor-test': {
command: 'meteor/runtests.sh'
},
'meteor-publish': {
command: 'meteor/publish.sh'
}
}
});
// load all tasks from the grunt plugins used in this file
require('load-grunt-tasks')(grunt);
// server
grunt.registerTask('server', ['connect', 'watch']);
// build: build summernote.js
grunt.loadTasks('build');
// test: unit test on test folder
grunt.registerTask('test', ['jshint', 'qunit', 'meteor-test']);
// dist
grunt.registerTask('dist', ['build', 'test', 'uglify', 'recess']);
// default: build, test, dist.
grunt.registerTask('default', ['dist']);
// Meteor tasks
grunt.registerTask('meteor-test', 'exec:meteor-test');
grunt.registerTask('meteor-publish', 'exec:meteor-publish');
grunt.registerTask('meteor', ['meteor-test', 'meteor-publish']);
};