-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCakefile
114 lines (90 loc) · 3.31 KB
/
Cakefile
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
fs = require('fs')
path = require('path')
less = require('less')
{print} = require('sys')
{spawn} = require('child_process')
coffeeSourceDir = 'src'
coffeeBuildDir = 'js'
lessDir = 'less'
cssDir = 'css'
lessFiles = ['widgets.less']
lessImportPath = [lessDir]
logError = (args...) ->
console.error('[ERROR]', args...)
coffee = (options, onError=null, onSuccess=null) ->
coffee = spawn 'coffee', options
coffee.stderr.on 'data', (data) ->
process.stderr.write data.toString()
coffee.stdout.on 'data', (data) ->
print data.toString()
coffee.on 'exit', (code) ->
if code == 0
if onSuccess?
onSuccess()
else
if onError
onError(code)
coffeeBuildAll = (onSuccess) ->
coffee(['-c', '-o', coffeeBuildDir, coffeeSourceDir]
, (code) ->
logError('Coffescript build FAILED with exit-code:', code)
, ->
console.log 'Built all coffescript successfully.'
if onSuccess?
onSuccess()
)
task 'coffeeBuild', 'Build the coffeescript sources.', ->
coffeeBuildAll()
task 'coffeeWatch', 'Watch the coffeescript sources for changes, and rebuild automatically.', ->
coffee(['-o', coffeeBuildDir, '-cw', coffeeSourceDir])
lessBuild = (lessfilepath, compress=false, onSuccess=null) ->
options = {
compress: compress
}
suffix = '.css'
if compress
suffix = '.min.css'
cssfilepath = path.join(cssDir, path.basename(lessfilepath, '.less') + suffix)
parser = new(less.Parser)({
paths: lessImportPath # Specify search paths for @import directives
filename: path.basename(lessfilepath) # Specify a filename, for better error messages
})
lessdata = fs.readFileSync(lessfilepath, 'utf-8')
parser.parse lessdata, (error, tree) ->
if error
logError "Could not build #{lessfilepath}: ", error
else
css = tree.toCSS(options)
fs.writeFile cssfilepath, css, (error) ->
if error
throw error
console.log "[less compile] #{lessfilepath} => #{cssfilepath}"
if onSuccess?
onSuccess()
lessBuildAll = (compress, onSuccess=null) ->
count = 0
for filename in lessFiles
lessBuild path.join(lessDir, filename), compress, ->
count += 1
if count == lessFiles.length
if onSuccess?
onSuccess()
lessBuildOnChange = ->
fs.watch lessDir, { persistent: true }, (event, filename) ->
console.log event, filename
console.log '[LESS changed]', filename
setImmediate ->
lessBuildAll()
task 'lessWatch', 'Watch for changes to the less sources, and rebuild when needed.', ->
lessBuildAll()
lessBuildOnChange()
task 'lessBuild', 'Build the configured .less files', ->
lessBuildAll()
task 'lessBuildCompress', 'Build the configured .less files compressed.', ->
lessBuildAll(true)
task 'productionBuild', 'Build coffeescript and less files', ->
lessBuildAll false, ->
console.log 'Built all less sources successfully to UNCOMPRESSED css.'
lessBuildAll true, ->
console.log 'Built all less sources successfully to COMPRESSED css.'
coffeeBuildAll()