-
Notifications
You must be signed in to change notification settings - Fork 22
/
cordova-minify.js
115 lines (105 loc) · 3.69 KB
/
cordova-minify.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
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var UglifyJS = require('uglify-js');
var CleanCSS = require('clean-css');
var ImageMin = require('imagemin');
var imagemin = new ImageMin();
var cssMinifier = new CleanCSS({
keepSpecialComments: 0
});
var rootDir = process.argv[2];
var platformPath = path.join(rootDir, 'platforms');
var platform = process.env.CORDOVA_PLATFORMS;
var cliCommand = process.env.CORDOVA_CMDLINE;
var isRelease = true;
//var isRelease = (cliCommand.indexOf('--release') > -1); // comment the above line and uncomment this line to turn the hook on only for release
if (!isRelease) {
return;
}
console.log('cordova-minify STARTING - minifying your js, css, and images. Sit back and relax!');
function processFiles(dir) {
fs.readdir(dir, function (err, list) {
if (err) {
console.log('processFiles - reading directories error: ' + err);
return;
}
list.forEach(function(file) {
file = path.join(dir, file);
fs.stat(file, function(err, stat) {
if (stat.isDirectory()) {
processFiles(file);
} else{
compress(file);
}
});
});
});
}
function compress(file) {
var ext = path.extname(file);
switch(ext) {
case '.js':
console.log('Compressing/Uglifying JS File: ' + file);
var result = UglifyJS.minify(file, {
compress: {
drop_console: true
}
});
fs.writeFileSync(file, result.code, 'utf8');
break;
case '.css':
console.log('Minifying CSS File: ' + file);
var source = fs.readFileSync(file, 'utf8');
var result = cssMinifier.minify(source);
fs.writeFileSync(file, result, 'utf8');
break;
// Image options https://github.com/imagemin/imagemin
case '.svg':
console.log('Minifying SVG File: ' + file);
// svgGo options https://github.com/imagemin/imagemin#svgo
imagemin.src(file).dest(file).use(ImageMin.svgo());
break;
case '.gif':
console.log('Minifying GIF File: ' + file);
// GifSicle options https://github.com/imagemin/imagemin#gifsicle
imagemin.src(file).dest(file).use(ImageMin.gifsicle({
interlaced: true
}));
break;
case '.png':
console.log('Minifying PNG File: ' + file);
// OptiPNG options https://github.com/imagemin/imagemin#optipng
imagemin.src(file).dest(file).use(ImageMin.optipng({
optimizationLevel: 2
}));
break;
case '.jpg':
case '.jpeg':
console.log('Minifying JPEG File: ' + file);
// jpegTran options https://github.com/imagemin/imagemin#jpegtran
imagemin.src(file).dest(file).use(ImageMin.jpegtran({
progressive: true
}));
console.log('Minifying JPEG File: ' + file);
break;
default:
console.log('Encountered file with ' + ext + ' extension - not compressing.');
break;
}
}
switch (platform) {
case 'android':
platformPath = path.join(platformPath, platform, "assets", "www");
break;
case 'ios':
platformPath = path.join(platformPath, platform, "www");
break;
default:
console.log('Hook currently supports only Android and iOS');
return;
}
var foldersToProcess = ['js', 'css', 'img'];
foldersToProcess.forEach(function(folder) {
processFiles(path.join(platformPath, folder));
});