-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
114 lines (98 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
module.exports = function(grunt) {
/****************************************
*
* PROJECT CONFIGURATION
*
****************************************/
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
/********************
* REPLACE FILES INLINE
********************/
'string-replace': {
inline: {
files: {
'build/': 'build/index.min.html'
},
options: {
replacements: [
{
pattern: /<(script|link)(.*?)\s(?:src|href)="(?:js\/|css\/)(.+)(\.js|\.css)"(?:><\/script>|\/>)/ig,
replacement: function(match,p1,p2,p3,p4){
p1 == 'link' && (p1='style');
return ['<'+p1+p2+'>',grunt.file.read('target/'+p3+'.min'+p4),'</'+p1+'>'].join('');
}
}
]
}
}
},
/********************
* MINIFY FILES
********************/
uglify: {
main : { files: { 'target/main.min.js' : ['src/js/main.js'] } },
proto : { files: { 'target/proto.min.js' : ['src/js/proto.js'] } },
ui : { files: { 'target/ui.min.js' : ['src/js/ui.js'] } }
},
cssmin: {
main: {
files: [{
expand: true,
cwd: 'src/css', src: ['*.css'],
dest: 'target', ext: '.min.css'
}]
}
},
/********************
* CLEAN
********************/
clean: {
target : ['target'],
build : ['build'],
all : ['target','build']
},
/********************
* COPY
********************/
copy: {
main: {
files: [
{
expand: true,flatten: true,filter: 'isFile',
src: ['src/index.html'], dest: 'build/',
rename: function(dest,src){return dest + src.replace('.html','.min.html')}
}
]
},
libs: {
files: [
{
expand: true,flatten:true,filter:'isFile',
src: ['src/js/jquery.js'], dest: 'target/',
rename: function(dest,src){return dest + src.replace('.js','.min.js')}
}
]
}
}
});
/****************************************
*
* LOAD PLUGINS
*
****************************************/
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-string-replace');
/****************************************
*
* REGISTER TASKS
*
****************************************/
// Full tasks
grunt.registerTask('build', ['clean:target', 'copy', 'uglify', 'cssmin', 'string-replace', 'clean:target']);
// Default task
grunt.registerTask('default', ['build']);
};