-
Notifications
You must be signed in to change notification settings - Fork 3
/
assembly.js
113 lines (64 loc) · 2.28 KB
/
assembly.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
var base = require('base-framework'),
_ = require('underscore'),
fs = require('fs'),
path = require('path'),
UglifyJS = require('uglify-js'),
crypto = require('crypto');
var Assembly = base.createChild().addInstanceMethods({
init : function( assets, config ){
this.assets = assets;
this.outputPath = config.outputPath || "/javascripts/";
this.assetsPath = config.assetsPath || "./public/javascripts"
this.buildPath = config.buildPath || "/cassette";
this.length = 0;
this.merged = '';
this.debugTags = '';
_.each(this.assets, function(asset){
this.length++;
this.merged += '\n' + asset.data;
var src = path.normalize(this.outputPath + '/' + asset.name);
if( /node_modules/.test(src) ){
var md5sum = crypto.createHash('md5');
md5sum.update(asset.data);
var hash = md5sum.digest('hex');
fs.writeFileSync(this.assetsPath + this.buildPath + '/' + hash + ".js", asset.data);
src = path.normalize(this.outputPath + this.buildPath + '/' + hash + ".js");
}
this.debugTags += "<script type='text/javascript' src='" + src + "'></script>"
}, this);
return this;
},
getDebugTags : function( outputPath ){
return this.debugTags;
},
getTag : function( outputPath ){
if(!this.minifiedFile){
try{
fs.statSync( path.normalize( this.assetsPath + this.buildPath ) );
}catch(e){
fs.mkdirSync( path.normalize( this.assetsPath + this.buildPath ) );
}
var merged = '// Created with Cassette-Express on ' + (new Date()).toDateString() + '\n\n';
merged = merged + this.merged;
var md5sum = crypto.createHash('md5');
md5sum.update(merged);
var hash = md5sum.digest('hex');
this.minifiedFile = this.outputPath + this.buildPath + '/' + hash + '.min.js';
try {
var minified = UglifyJS.minify(merged, {fromString: true});
fs.writeFileSync(this.assetsPath + this.buildPath + '/' + hash + '.min.js', minified.code);
}catch(e){
fs.writeFileSync(this.assetsPath + this.buildPath + '/' + hash + '.min.js', merged);
}
}
return "<script type='text/javascript' src='" + this.minifiedFile + "'></script>";
},
query : function(){
var list = [];
_.each(this.assets, function(asset){
list.push(asset.name);
});
return list;
}
});
exports = module.exports = Assembly;