forked from jccovey/watch-lessc
/
app.js
executable file
·92 lines (84 loc) · 2.31 KB
/
app.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
#!/usr/bin/env node
var fs = require('fs');
var util = require('util');
var path = require('path');
var less = require('less');
var watch = require('watch');
var argv = require('optimist')
.usage('Usage: {OPTIONS}')
.wrap(80)
.option('input', {
alias: 'i',
demand: 'i',
desc: 'Specify input file to watch/compile.'
})
.option('directory', {
alias: 'd',
desc: 'Specify input directory to watch.'
})
.option('output', {
alias: 'o',
demand: 'o',
desc: 'Specify output file path.'
})
.option('help', {
alias: 'h',
desc: 'Show this message'
})
.check(function(argv) {
if (argv.help) {
throw '';
}
}).argv;
var lessc = function(input, output){
return function (e, data) {
if (e) {
console.log("lessc: " + e.message);
}
var parser = new(less.Parser)({
paths: [path.dirname(input)],
optimization: 0,
filename: input
});
parser.parse(data, function (err, tree) {
if (err) {
less.writeError(err, options);
} else {
try {
var css = tree.toCSS({ compress: false });
if (output) {
var fd = fs.openSync(output, "w");
fs.writeSync(fd, css, 0, "utf8");
} else {
util.print(css);
}
} catch (e) {
less.writeError(e, options);
}
}
});
};
};
var input_file = path.resolve(process.cwd(), argv.input);
var output_file = path.resolve(process.cwd(), argv.output);
var watch_directory = argv.directory ? path.resolve(process.cwd(), argv.directory): '';
/**
* Compiles the less files given by the input and ouput options
*/
function compileInput(){
console.log("watch-lessc: Updated: " + output_file);
fs.readFile(input_file, 'utf-8', lessc(input_file, output_file));
}
/*
* Check to see if we are watching a directory or just
* a single file
*/
if (watch_directory){
watch.watchTree(watch_directory, function(f, curr, prev){
compileInput();
});
} else {
fs.watchFile(input_file, function(current, previous) {
compileInput();
});
}